電波ビーチ

☆(ゝω・)v

Goでjsonファイルを読もうとしたらエラー出た->BOM付きファイルでした

かなしい事件。

    
    .
    .
    .
    p := filepath.FromSlash(cur + "/peropero.json")
    f, err := os.Open(p)
    if err != nil {
        log.Fatalln(err)
    }
    defer f.Close()
    .
    .
    .

以下のようなエラーが出た

2022/05/07 22:56:16 invalid character 'ï' looking for beginning of value

かなしいね

vscode(英語表記)ならここから「UTF-8 with BOM」をクリックして「Reopen with Encoding」->「UTF-8」としてやる。逆にBOM付のファイルにすることはなぜかできなかった(たぶん)

あるいはメモ帳から「名前を付けて保存」するときにエンコード方式を選べて、BOM付もあるらしい。いつのwindowsバージョンからかは知らん。これはwindows11です


BOM付きのファイルは先頭にBOMの文字が3byteぶん入る。BOMはutf8でエンコードすると0xEF 0xBB 0xBFだが、これはwindows cp1252の表現ではになる。今回はファイルを変換したが、逆にos.OpenでBOM付きで開く方法があるかどうかは知らない。まあ先頭3byteを読めばいいだけではあるけど