Rumah pembangunan bahagian belakang Golang golang csv menghuraikan aksara bercelaru

golang csv menghuraikan aksara bercelaru

May 15, 2023 am 09:13 AM

Apabila menggunakan Golang untuk menghuraikan fail csv, kadangkala anda akan menghadapi masalah aksara bercelaru. Keadaan ini sangat biasa, tetapi ia juga sangat menyusahkan. Jadi, bagaimana untuk menyelesaikan masalah ini?

Mula-mula kita mesti faham bahawa csv ialah format fail teks, menggunakan "," untuk memisahkan setiap medan. Apabila data teks dalam fail CSV mengandungi aksara bukan ASCII, aksara bercelaru akan berlaku. Punca masalah ini sebenarnya berkaitan dengan pengekodan Ia biasanya disebabkan oleh ketidakselarasan antara format pengekodan fail csv dan format pengekodan yang digunakan semasa menghurai.

Dalam golang, pustaka csv yang biasa digunakan ialah pengekodan/csv terbina dalam. Pustaka ini menggunakan pengekodan UTF-8 secara lalai untuk menghuraikan fail csv. Jika anda ingin memproses fail csv dalam format pengekodan lain, pemprosesan tambahan diperlukan.

Terdapat beberapa kaedah untuk menyelesaikan masalah aksara bercelaru Kami akan memperkenalkannya satu persatu di bawah:

Kaedah 1. Tukar format pengekodan secara manual

Sebelum menghuraikan. csv, kami boleh menukar secara manual Cara paling mudah untuk menukar format pengekodan fail csv kepada UTF-8 ialah menggunakan Notepad untuk membuka fail csv dan menyimpannya ke format UTF-8.

Penukaran manual mungkin menyusahkan, terutamanya apabila kami mempunyai sejumlah besar fail csv. Oleh itu, kita boleh mencuba kaedah kedua.

Kaedah 2. Gunakan pustaka pihak ketiga

Pustaka penghuraian csv biasa di Golang ialah pengekodan/csv Jika kita perlu memproses fail csv dalam format pengekodan lain, kita perlu menggunakan a perpustakaan pihak ketiga untuk membantu menghurai. Sebagai contoh, anda boleh menggunakan gocsv untuk menghuraikan fail csv dalam format pengekodan gbk.

Kaedah pemasangan Gocsv:

$ go get github.com/kuangyh/csv

Seterusnya, anda boleh menggunakan gocsv untuk menghuraikan fail csv seperti ini:

package main

import (
    "encoding/csv"
    "fmt"
    "github.com/kuangyh/csv"
    "os"
)

func main() {
    file, err := os.Open("example.csv")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    defer file.Close()

    reader := csv.NewReader(gocsv.NewReader(file))
    reader.Comma = ','

    lines, err := reader.ReadAll()
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    for i, line := range lines {
        fmt.Printf("Line %d: %v
", i+1, line)
    }
}

Dalam kod di atas, kami mula-mula mengimport pustaka gocsv, kemudian menggunakan gocsv untuk mencipta pembaca baharu, menghantarnya ke pustaka pengekodan/csv dan tetapkan pembatas kepada ",". Akhir sekali, gunakan kaedah ReadAll untuk mendapatkan semua baris dalam fail dan mencetak output.

Walaupun kaedah ini berkesan, ia juga mempunyai beberapa masalah. Sebagai contoh, kita perlu menggunakan perpustakaan pihak ketiga untuk melengkapkan penukaran, yang akan meningkatkan kebergantungan dan kerumitan. Jika kita tidak mahu menggunakan perpustakaan pihak ketiga, terdapat kaedah ketiga.

Kaedah 3. Penghuraian manual

Proses penghuraian manual mungkin menyusahkan, tetapi ia juga merupakan penyelesaian yang berkesan. Perkara utama ialah memahami format fail csv.

Biasanya kami menambah pengepala fail pada baris pertama fail csv, yang mengandungi nama setiap medan. Pengepala fail ini juga merupakan sebahagian daripada fail csv dan boleh diperolehi dengan menghuraikan baris pertama. Dalam baris data, data setiap baris terdiri daripada berbilang medan dan medan ini dipisahkan dengan ",". Jika tiada masalah kod bercelaru, maka kami boleh menggunakan perpustakaan pengekodan/csv untuk menghuraikan fail csv secara terus. Tetapi jika aksara bercelaru berlaku, anda perlu menghuraikan setiap medan secara manual dan menukarnya ke dalam format UTF-8.

Berikut ialah kod penghuraian manual:

package main

import (
    "bufio"
    "encoding/csv"
    "fmt"
    "io"
    "os"
)

func main() {
    file, err := os.Open("example.csv")
    if err != nil {
        fmt.Println("Error:", err)
    }
    defer file.Close()

    reader := bufio.NewReader(file)
    var lines [][]string

    for {
        line, err := reader.ReadString('
')
        if err != nil && err != io.EOF {
            fmt.Println("Error:", err)
            return
        }

        if line == "" {
            break
        }

        // 去除换行符
        line = line[:len(line)-2]

        r := csv.NewReader([]byte(line))
        r.Comma = ','

        fields, err := r.Read()
        if err != nil {
            fmt.Println("Error:", err)
            return
        }

        // 将字段转换为UTF-8
        for i, s := range fields {
            fields[i] = transform(s)
        }

        lines = append(lines, fields)
    }

    for i, line := range lines {
        fmt.Printf("Line %d: %v
", i+1, line)
    }
}

// 将单个字段转换为UTF-8
func transform(s string) string {
    data, err := ioutil.ReadAll(transform.NewReader(strings.NewReader(s), simplifiedchinese.GBK.NewDecoder()))
    if err != nil {
        return s
    }
    return string(data)
}

Dalam kod di atas, kami mula-mula membaca setiap baris fail csv melalui bufio, dan kemudian menggunakan perpustakaan pengekodan/csv untuk menghuraikan data setiap baris. Untuk menyelesaikan masalah bercelaru, kami menggunakan fungsi transform() untuk menukar setiap medan ke dalam format UTF-8.

Fungsi ini menerima parameter rentetan, mula-mula menukarnya kepada Pembaca, kemudian menggunakan simplifiedchinese.GBK.NewDecoder() untuk mencipta penyahkod, dan akhirnya menggunakan fungsi ioutil.ReadAll() untuk menukar rentetan yang dikodkan kepada UTF -8.

Dengan cara ini, kami boleh menghuraikan fail csv secara manual dan menukarnya kepada format yang dikodkan UTF-8.

Ringkasan:

Di atas adalah tiga kaedah untuk menyelesaikan masalah golang csv menghuraikan aksara bercelaru. Jika fail csv yang anda gunakan dikodkan UTF-8, ia boleh dihuraikan dengan mudah menggunakan pengekodan/csv golang sendiri. Jika tidak, anda boleh memilih untuk menghuraikan secara manual atau menggunakan pustaka pihak ketiga untuk penukaran mengikut keperluan sebenar. Walau apa pun, selagi anda menguasai kaedah yang betul, masalah watak bercelaru tidak lagi menjadi masalah.

Atas ialah kandungan terperinci golang csv menghuraikan aksara bercelaru. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Skop pembolehubah PHP dijelaskan
1 bulan yang lalu By 百草
Petua untuk menulis komen php
4 minggu yang lalu By 百草
Mengulas kod dalam php
4 minggu yang lalu By 百草

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1510
276
Pergi untuk pemprosesan audio/video Pergi untuk pemprosesan audio/video Jul 20, 2025 am 04:14 AM

Inti pemprosesan audio dan video terletak pada pemahaman proses asas dan kaedah pengoptimuman. 1. Proses asas termasuk pengambilalihan, pengekodan, penghantaran, penyahkodan dan main balik, dan setiap pautan mempunyai kesukaran teknikal; 2. Masalah biasa seperti penyimpangan audio dan video, kelewatan lag, bunyi bunyi, gambar kabur, dan lain -lain boleh diselesaikan melalui pelarasan segerak, pengoptimuman pengekodan, modul pengurangan hingar, pelarasan parameter, dan sebagainya; 3. Adalah disyorkan untuk menggunakan FFMPEG, OpenCV, WebRTC, GSTREAMER dan alat lain untuk mencapai fungsi; 4. Dari segi pengurusan prestasi, kita harus memberi perhatian kepada pecutan perkakasan, penetapan kadar bingkai resolusi yang munasabah, masalah konvensyen dan masalah kebocoran memori. Menguasai perkara utama ini akan membantu meningkatkan kecekapan pembangunan dan pengalaman pengguna.

Membangunkan pengendali Kubernet di mana sahaja Membangunkan pengendali Kubernet di mana sahaja Jul 25, 2025 am 02:38 AM

Cara yang paling berkesan untuk menulis Kubernetesoperator adalah untuk menggunakan Go untuk menggabungkan Kubebuilder dan pengawal-runtime. 1. Memahami corak pengendali: Tentukan sumber tersuai melalui CRD, tulis pengawal untuk mendengar perubahan sumber dan lakukan gelung perdamaian untuk mengekalkan keadaan yang diharapkan. 2. Gunakan Kubebuilder untuk memulakan projek dan membuat API untuk menghasilkan CRD, pengawal dan konfigurasi secara automatik. 3. Tentukan spec dan struktur status CRD dalam API/V1/MYAPP_TYPES.GO, dan menjalankan makeManifests untuk menjana cRDYAML. 4. Daftar masuk dalam pengawal

Teknik Pengoptimuman Permintaan Pergi untuk PostgreSQL/MySQL Teknik Pengoptimuman Permintaan Pergi untuk PostgreSQL/MySQL Jul 19, 2025 am 03:56 AM

TooptimizegoapplicationsInteractingWithPostgreSqlormysql, focusonindexing, selectivequeries, connectionhandling, caching, andormefficiency.1) useproperIndexing-identifyfrequeriedcolumns, addIndExessely, andusecompositeindexesformultifulty-columnuerformultiulti

Pergi OAuth2 Pelaksanaan Pelanggan dan Pelayan Pergi OAuth2 Pelaksanaan Pelanggan dan Pelayan Jul 16, 2025 am 02:57 AM

Pelaksanaan OAuth2 dibahagikan kepada klien dan pelayan. Pelanggan menggunakan pakej Golang.org/OAuth2. Langkah -langkahnya ialah: 1. Memperkenalkan pakej; 2. Konfigurasikan maklumat klien dan bina objek konfigurasi; 3. Menjana pautan kebenaran; 4. Proses panggilan balik untuk mendapatkan token; 5. Membina pelanggan HTTP dengan kebenaran. Pelayan mengambil Go-OAuth2/OAuth2 sebagai contoh, dan prosesnya termasuk: 1. Inisialisasi penyimpanan; 2. Tetapkan maklumat pelanggan; 3. Buat contoh perkhidmatan OAuth2; 4. Tulis kebenaran pemprosesan laluan dan permintaan token. Nota termasuk: isu silang domain, pengesahan status, HTTPS didayakan, pengurusan kesahihan token, dan granulariti kawalan skop.

Membaca dari Stdin dalam Contoh Membaca dari Stdin dalam Contoh Jul 27, 2025 am 04:15 AM

Gunakan fmt.scanf untuk membaca input diformat, sesuai untuk data berstruktur yang mudah, tetapi rentetan dipotong ketika menghadapi ruang; 2. Adalah disyorkan untuk menggunakan bufio.scanner untuk membaca garis demi baris, menyokong input berbilang baris, pengesanan EOF dan input saluran paip, dan boleh mengendalikan kesilapan pengimbasan; 3. Gunakan io.readall (os.stdin) untuk membaca semua input sekaligus, sesuai untuk memproses data blok besar atau aliran fail; 4. Sambutan utama masa nyata memerlukan perpustakaan pihak ketiga seperti golang.org/x/term, dan Bufio mencukupi untuk senario konvensional; Cadangan Praktikal: Gunakan fmt.scan untuk input mudah interaktif, gunakan bufio.scanner untuk input baris atau saluran paip, gunakan io.readall untuk data blok besar, dan sentiasa mengendalikan

Peruntukan timbunan vs timbunan dengan petunjuk di Go Peruntukan timbunan vs timbunan dengan petunjuk di Go Jul 23, 2025 am 04:14 AM

Peruntukan Stack sesuai untuk pembolehubah tempatan kecil dengan kitaran hayat yang jelas, dan diuruskan secara automatik, dengan kelajuan yang cepat tetapi banyak sekatan; Peruntukan timbunan digunakan untuk data dengan kitaran hayat yang panjang atau tidak pasti, dan fleksibel tetapi mempunyai kos prestasi. Pengkompil GO secara automatik menentukan kedudukan peruntukan pembolehubah melalui analisis melarikan diri. Jika pembolehubah boleh melarikan diri dari skop fungsi semasa, ia akan diperuntukkan kepada timbunan. Situasi biasa yang menyebabkan melarikan diri termasuk: mengembalikan penunjuk pembolehubah tempatan, memberikan nilai kepada jenis antara muka, dan lulus dalam goroutine. Hasil analisis melarikan diri dapat dilihat melalui -gcflags = " -m". Apabila menggunakan petunjuk, anda harus memberi perhatian kepada kitaran hidup yang berubah -ubah untuk mengelakkan pelarian yang tidak perlu.

Pergi untuk pengkomputeran saintifik dan analisis berangka Pergi untuk pengkomputeran saintifik dan analisis berangka Jul 23, 2025 am 01:53 AM

GO Language boleh digunakan untuk pengiraan saintifik dan analisis berangka, tetapi perlu difahami. Kelebihannya terletak pada sokongan dan prestasi konkurensi, yang sesuai untuk algoritma selari seperti penyelesaian yang diedarkan, simulasi Monte Carlo, dan sebagainya; Perpustakaan komuniti seperti gonum dan MAT64 menyediakan fungsi pengiraan numerik asas; Pengaturcaraan hibrid boleh digunakan untuk memanggil C/C dan Python melalui CGO atau antara muka untuk meningkatkan kepraktisan. Batasannya adalah bahawa ekosistem tidak matang seperti python, visualisasi dan alat lanjutan lebih lemah, dan beberapa dokumen perpustakaan tidak lengkap. Adalah disyorkan untuk memilih senario yang sesuai berdasarkan ciri GO dan merujuk kepada contoh kod sumber untuk menggunakannya secara mendalam.

Pergi untuk perpustakaan manipulasi imej Pergi untuk perpustakaan manipulasi imej Jul 21, 2025 am 12:23 AM

Perpustakaan pemprosesan imej yang biasa termasuk pakej imej perpustakaan standard dan perpustakaan pihak ketiga, seperti pengimejan, bimg, dan imagick. 1. Pakej imej sesuai untuk operasi asas; 2. Pencitraan mempunyai fungsi lengkap dan API mudah, yang sesuai untuk kebanyakan keperluan; 3. BIMG didasarkan pada libvips, mempunyai prestasi yang kuat, yang sesuai untuk imej besar atau kesesuaian yang tinggi; 4. Imagick mengikat Imagemagick, yang berkuasa tetapi mempunyai ketergantungan yang berat. Cepat melaksanakan skala imej dan penanaman. Anda boleh menggunakan perpustakaan pengimejan untuk menyelesaikannya melalui beberapa baris kod dalam saiz semula dan fungsi cropanchor, dan menyokong konfigurasi parameter berganda. Menambah penapis atau nada penyesuaian dapat dicapai melalui fungsi transformasi warna yang disediakan oleh imaginasi, seperti graysc

See all articles