ホームページ > バックエンド開発 > Golang > BOM エンコーディングと非 BOM エンコーディングの両方を処理しながら、Go で UTF-16 テキスト ファイルを正しく読み取るにはどうすればよいですか?

BOM エンコーディングと非 BOM エンコーディングの両方を処理しながら、Go で UTF-16 テキスト ファイルを正しく読み取るにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-27 15:32:11
オリジナル
330 人が閲覧しました

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

Go で UTF-16 テキスト ファイルを文字列として読み取る

Go で UTF-16 テキスト ファイルを読み取るときに、バイトが ASCII として解釈される問題が発生する可能性があります。これは、標準の bufio.NewReader 関数が Unicode を正しく処理しないために発生します。

解決策

BOM 付き UTF-16

「golang.org/x」の最新バージョン/text/encoding/unicode」には、デコードする BOM を自動的に検出して解釈する unicode.BOMOverride が導入されています。 UTF-16 が正しく設定されています。 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
}
ログイン後にコピー

この関数は、BOM 付きの UTF-16 ファイルをデコードします。

BOM のない UTF-16

ファイルがデコードする場合BOM が含まれていない場合は、次のコードを使用できます:

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
}
ログイン後にコピー

This関数は BOM をスキップし、ファイルを UTF-16 として読み取ります。

結論

ReadFileUTF16() または ReadFileUTF16WithoutBOM() を使用すると、BOM と非 BOM の両方の UTF-16 テキストを処理できます。 Go でファイルを作成し、データの正確なデコードと表現を保証します。

以上がBOM エンコーディングと非 BOM エンコーディングの両方を処理しながら、Go で UTF-16 テキスト ファイルを正しく読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート