Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Membaca Fail Teks UTF-16 dengan betul sebagai Rentetan dalam Go?
Apabila membaca fail teks UTF-16 ke dalam bait tatasusunan menggunakan kaedah input standard, aksara yang dikodkan UTF-16 fail mungkin tidak ditafsirkan dengan betul. Ini boleh menyebabkan bait dianggap sebagai ASCII, yang membawa kepada perwakilan rentetan yang salah.
Untuk membaca fail teks UTF-16 dengan betul, adalah penting untuk digunakan kaedah yang direka khusus untuk mengendalikan pengekodan UTF-16. Pakej golang.org/x/text/encoding/unicode menyediakan kefungsian yang diperlukan untuk tujuan ini.
func ReadFileUTF16(filename string) ([]byte, error) { // Read the file into a byte array raw, err := ioutil.ReadFile(filename) if err != nil { return nil, err } // Create a transformer that converts MS-Windows default to UTF8 win16be := unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM) // Override the BOM to ensure it is respected utf16bom := unicode.BOMOverride(win16be.NewDecoder()) // Apply the transformer to the input byte array unicodeReader := transform.NewReader(bytes.NewReader(raw), utf16bom) // Decode the data into a new byte array decoded, err := ioutil.ReadAll(unicodeReader) return decoded, err }
Untuk senario di mana membaca keseluruhan fail tidak boleh dilaksanakan, fungsi berikut mencipta pengimbas yang menggunakan perkara yang sama Logik penyahkodan UTF-16:
func NewScannerUTF16(filename string) (utfScanner, error) { // Read the file into a []byte file, err := os.Open(filename) if err != nil { return nil, err } // Create a transformer that converts MS-Windows default to UTF8 win16be := unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM) // Override the BOM to ensure it is respected utf16bom := unicode.BOMOverride(win16be.NewDecoder()) // Apply the transformer to the input file unicodeReader := transform.NewReader(file, utf16bom) return unicodeReader, nil }
Pakej golang.org/x/text/encoding/unicode secara bijak mentafsir Tanda Pesanan Bait (BOM) untuk menentukan pengekodan yang digunakan dalam fail. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa fungsi ReadLine pakej bufio tidak menyokong penyahkod Unikod.
Untuk penyesuaian dan pilihan tambahan yang berkaitan dengan penyahkodan UTF-16, rujuk sumber terbuka modul di https://github.com/TomOnTime/utfutil/.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca Fail Teks UTF-16 dengan betul sebagai Rentetan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!