web-dev-qa-db-ja.com

2バイトUTF-8シーケンスのバイト2が無効です

<?version = 1.0, encoding = UTF-8>を使用してXMLファイルを解析しようとしていますが、エラーメッセージinvalid byte 2 of 2-byte UTF-8 sequenceに遭遇しました。誰がこの問題の原因を知っていますか?

26
flyingfromchina

最も一般的な原因は、_ISO-8859-x_(Latin-x、Latin-1のような)を供給することですが、パーサーは_UTF-8_を取得していると考えています。 Latin-1文字の特定のシーケンス(アクセントまたはウムラウト付きの2つの連続した文字)は、_UTF-8_として無効なものを形成します。具体的には、最初のバイトに基づいて、2番目のバイトに予期しない高位ビットがあります。

これは、一部のプロセスがLatin-1を使用してXMLをダンプするときに簡単に発生しますが、XML宣言の出力を忘れます(この場合、XMLパーサーは_UTF-8_、XML仕様に従って)、またはそうでない場合でも_UTF-8_であると主張します。

21
StaxMan

ファイルが別の方法でエンコードされていても、パーサーがUTF-8に設定されているか、ファイルがUTF-8を使用していると宣言されていますが、実際にはエンコードされていません。

同じ問題がありました。私の問題は、jdomとFileWriter(xmlFile)で新しいXMLファイルを作成したことです。 FileWriterはUTF-8ファイルを作成できませんでした。代わりにFileOutputStream(xmlFile)を使用して解決しました。

5
Spen

String.getBytes()で使用されるデフォルトの文字エンコーディングをutf-8に変更してみてください。 VMオプション-Dfile.encoding = utf-8を使用します。

4
atott

まだそのような間違いを犯している人のために。

uTF-8が使用されているため、ラテン文字などについてxmlドキュメントをチェックアウトしてください:私は同じ問題を抱えていたので、私はこれを持っていました:

<n:name>Åke Jógvan Øyvind</n:name>

お役に立てれば

2
Salah Klein

.xmlファイルをJavaツールにインポートしようとしたときにも同じ問題が発生しました。これに適したソリューションが見つかりました。1. Notepad ++で.xmlファイルを開き、.xmlを保存します。ファイルを.rtfファイルとして保存してから、このファイルをワードパッドアプリケーションで開きます..rtfファイルを.txtファイルとして保存し、メモ帳で開いて、再度.xmlファイルとして保存します。ポップアップウィンドウで、[エンコード:UTF-8]オプションを選択してください。

0
Athu