json.Unmarshal を使用して JSON 出力をアンマーシャルしようとしたときに、Microsoft Translator への Web サービス リクエストでエラーが発生しました。発生した具体的なエラーは、「値の先頭を検索する無効な文字 'ï'」でした。
JSON 応答を文字列として検査すると、データが有効であることが明らかになりました。 。ただし、応答のバイト配列と予想されるデータの手動でマーシャリングされたバージョンを比較すると、不一致が明らかになりました。
この不一致は、バイト オーダー マークの存在に起因すると考えられます。 (BOM) が応答に含まれます。 BOM は、テキスト ファイルのエンコーディングを識別する特殊文字です。この場合は UTF-8 です。
BOM は、JSON 応答をデコードする前に削除する必要があります。これは、次のコード行を使用して実現できます。
body = bytes.TrimPrefix(body, []byte("\xef\xbb\xbf")) // Or []byte{239, 187, 191}
bytes.TrimPrefix 関数は、本文バイト配列の先頭から BOM を削除し、後続の json.Unmarshal を許可します。無効な文字エラーが発生せずに操作を続行できます。
エラーjson.Unmarshal 中に「無効な文字 'ï' が値の始まりを探しています」というエラーが発生するのは、JSON 応答の BOM が原因である可能性があります。 bytes.TrimPrefix 関数を使用して BOM を削除すると、問題が解決され、データが正常にアンマーシャリングされるようになります。
以上がJSON Unmarshal での「無効な文字 \'ï\' が値の先頭を探しています」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。