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 サイトの他の関連記事を参照してください。