ホームページ > バックエンド開発 > Golang > Go で UTF-16 テキスト ファイルを文字列として正しく読み取るにはどうすればよいですか?

Go で UTF-16 テキスト ファイルを文字列として正しく読み取るにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-30 13:28:14
オリジナル
203 人が閲覧しました

How Can I Correctly Read a UTF-16 Text File as a String in Go?

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

問題を理解する

UTF-16 テキスト ファイルをバイトに読み取る場合標準入力メソッドを使用して配列を使用すると、ファイルの UTF-16 エンコード文字が正しく解釈されない可能性があります。これにより、バイトが ASCII として扱われ、文字列表現が正しくなくなる可能性があります。

UTF-16 デコードを使用した解決策

UTF-16 テキスト ファイルを適切に読み取るには、次を使用することが重要です。 UTF-16 エンコーディングを処理するために特別に設計されたメソッド。 golang.org/x/text/encoding/unicode パッケージは、この目的に必要な機能を提供します。

ReadFileUTF16() Function

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

NewScannerUTF16() Function

ファイル全体を読み取ることが不可能なシナリオの場合、次の関数は同じ 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
}
ログイン後にコピー

BOM と Unicode サポートに関するディスカッション

golang.org/x/text/encoding/unicode パッケージは、バイト オーダー マーク (BOM) をインテリジェントに解釈して、使用されるエンコーディングを決定します。ファイル。ただし、bufio パッケージの ReadLine 関数は Unicode デコードをサポートしていないことに注意することが重要です。

その他のリソース

UTF-16 デコードに関連する追加のカスタマイズとオプションについては、オープン ソースを参照してください。モジュール (https://github.com/TomOnTime/utfutil/.

)

以上がGo で UTF-16 テキスト ファイルを文字列として正しく読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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