ホームページ > バックエンド開発 > Golang > Go でバイトオーダー マーク (BOM) を持つファイルを処理するにはどうすればよいですか?

Go でバイトオーダー マーク (BOM) を持つファイルを処理するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-03 15:31:30
オリジナル
618 人が閲覧しました

How to Handle Files with a Byte-Order Mark (BOM) in Go?

Go でバイトオーダー マーク (BOM) を持つファイルを読み取る

Go で、バイトオーダーの有無にかかわらず Unicode ファイルを処理するマーク (BOM) は手動処理が必要です。コア ライブラリ内で確立された方法はありませんが、一般的なアプローチには次のものが含まれます。

バッファー リーダーの使用:

Java.io.BufferedReader は次の目的で利用できます。最初の数バイトを含む、ファイルからデータを読み取ります。以下に例を示します。

import (
    "bufio"
    "os"
    "log"
)

func main() {
    fd, err := os.Open("filename")
    if err != nil {
        log.Fatal(err)
    }
    defer fd.Close()
    br := bufio.NewReader(fd)
    r, _, err := br.ReadRune()
    if err != nil {
        log.Fatal(err)
    }
    if r != '\uFEFF' {
        br.UnreadRune()
    }
}
ログイン後にコピー

最初のバイトの直接読み取り:

io.Seeker インターフェイスがサポートされている場合、最初の 3 バイトを読み取ってチェックできます。 BOM が識別されない場合は、ファイル ポインタを先頭にリセットできます。

import (
    "os"
    "log"
)

func main() {
    fd, err := os.Open("filename")
    if err != nil {
        log.Fatal(err)
    }
    defer fd.Close()
    var bom [3]byte
    _, err = fd.Read(bom[:])
    if err != nil {
        log.Fatal(err)
    }
    if bom[0] != 0xef || bom[1] != 0xbb || bom[2] != 0xbf {
        _, err = fd.Seek(0, 0)
        if err != nil {
            log.Fatal(err)
        }
    }
}
ログイン後にコピー

注:

これらのアプローチは、UTF-8 エンコーディングを前提としています。異なるエンコーディングを処理すると、さらに複雑さが増します。

以上がGo でバイトオーダー マーク (BOM) を持つファイルを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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