Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Membaca Fail Teks UTF-16 dengan Betul dalam Go, Mengendalikan Pengekodan BOM dan Bukan BOM?

Bagaimanakah Saya Boleh Membaca Fail Teks UTF-16 dengan Betul dalam Go, Mengendalikan Pengekodan BOM dan Bukan BOM?

Susan Sarandon
Lepaskan: 2024-12-27 15:32:11
asal
365 orang telah melayarinya

How Can I Correctly Read UTF-16 Text Files in Go, Handling Both BOM and Non-BOM Encodings?

Membaca Fail Teks UTF-16 sebagai Rentetan dalam Go

Apabila membaca fail teks UTF-16 dalam Go, anda mungkin menghadapi masalah dengan bait yang ditafsirkan sebagai ASCII. Ini timbul kerana fungsi bufio.NewReader standard tidak mengendalikan unicode dengan betul.

Penyelesaian

UTF-16 dengan BOM

Versi terkini "golang.org/x /text/encoding/unicode" memperkenalkan unicode.BOMOverride, yang secara automatik mengesan dan mentafsir BOM untuk menyahkod UTF-16 dengan betul. Berikut ialah contoh menggunakan ReadFileUTF16():

func ReadFileUTF16(filename string) ([]byte, error) {
    raw, err := ioutil.ReadFile(filename)
    if err != nil {
        return nil, err
    }
    win16be := unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
    utf16bom := unicode.BOMOverride(win16be.NewDecoder())
    unicodeReader := transform.NewReader(bytes.NewReader(raw), utf16bom)
    decoded, err := ioutil.ReadAll(unicodeReader)
    return decoded, err
}
Salin selepas log masuk

Fungsi ini akan menyahkod fail UTF-16 dengan BOM.

UTF-16 tanpa BOM

Jika fail anda melakukannya tidak mengandungi BOM, anda boleh menggunakan kod berikut:

func ReadFileUTF16WithoutBOM(filename string) ([]byte, error) {
    f, err := os.Open(filename)
    if err != nil {
        return nil, err
    }
    r := bufio.NewReader(f)

    // Read past the BOM, if any.
    var b, e = r.Peek(2)
    if (b[0] == 0xFF && b[1] == 0xFE) || (b[0] == 0xFE && b[1] == 0xFF) {
        r.Discard(2)
    }

    // Read the rest of the file.
    decoded, err := ioutil.ReadAll(r)
    return decoded, err
}
Salin selepas log masuk

Fungsi ini akan melangkau mana-mana BOM dan baca fail sebagai UTF-16.

Kesimpulan

Dengan menggunakan ReadFileUTF16() atau ReadFileUTF16WithoutBOM(), anda boleh mengendalikan kedua-dua fail teks BOM dan bukan BOM UTF-16 dalam Go, memastikan penyahkodan dan perwakilan data anda dengan tepat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca Fail Teks UTF-16 dengan Betul dalam Go, Mengendalikan Pengekodan BOM dan Bukan BOM?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan