• 締切済み

2バイト文字を含むXMLファイルのパース

こんばんわyukimura1024です。 JavaでXMLファイルを読み込み、それをもとに別のXMLファイルを作って出力するプログラムを作っています。 環境はWinXPsp2、JDK1.4.2_08でeclipseを使ってます。 現象なのですが、以下のようなソースでtest.xmlを読み込もうとすると、ファイル内に2バイト文字があるときだけ、 org.xml.sax.SAXParseException:文字変換エラー:"Uniconvertible UTF-8 character beginning with 0x83"(行番号が小さすぎる可能性があります) というエラーが出てしまいます。 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new FileInputStream("test.xml")); //←ここでエラー ネットで調べて「ヘッダ部で指定したエンコーディング名と、実際のXMLファイルの文字コードが異なっていないかを確認してください。XMLファイルをシフトJISで保存しているのであれば、ヘッダ部には<?xml version="1.0" encoding="Shift_JIS"?>といった指定を行う必要があります。」というのを見つけて試してみましたがうまくいきません。 とにかく2バイト文字が含まれているとエラーが出てしまいます(TT このエラーが出ないようにするには、どうしたらよいででしょうか? ご存知の方、教えていただけると助かります!よろしくお願いします。

みんなの回答

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.1

>試してみましたがうまくいきません ここまで書いたんですから、試した内容も一緒に載せましょう。 ・ファイルのエンコーディングは確かにShift_JISですか?どうやって確認しましたか? ・追加したXML宣言の内容はどういったものを追加したのか貼り付けてみてください >とにかく2バイト文字が含まれているとエラーが出てしまいます ・発生した例外のスタックトレースの内容も同じく貼り付けてください

yukimura1024
質問者

お礼

原因がわかりました。 原因はXMLファイルの先頭行にコメント?があってそれを消したらエラーにならなくなりました。 よく確認せずに質問してしまって申し訳ありません(TT 回答していただきありがとうございました(^^ こんな感じでした↓ <!-- java___nantara... --> <?xml version="1.0" encoding="Shift_JIS" ?> <jam> <java name="helloworld.java"> <import module="あいうえお"/> </java> </jam>

yukimura1024
質問者

補足

回答ありがとうございます。 最初に書いた現象は別の場所の別マシンで試したもので、 今、家の環境(WinXPsp2+JDK1.5+Eclipse3.1)で試してみたのですが、 エラーが起きないという、まったく逆の結果になってしまいました。 とりあえず、最初の現象(エラー)が起きたときは以下のような状況でした。 >ここまで書いたんですから、試した内容も一緒に載せましょう。 試した内容はXMLファイルの中に全角文字を書いたものと書かないもの を用意して両方試してみました。 >ファイルのエンコーディングは確かにShift_JISですか?どうやって確認しましたか? ファイルのエンコーディングは秀丸でメニューから「ファイル」→「名前をつけて保存」 と選んでファイルの種類に「日本語(Shift-JIS)」を選んで保存しました。 >追加したXML宣言の内容はどういったものを追加したのか貼り付けてみてください XMLファイルは(1)だとエラーにならず、(2)だとエラーになります。 (うろ覚えです) (1) <?xml version="1.0" encoding="Shift_JIS" ?> <jam> <java name="helloworld.java"> <import module="aiueo"/> </java> </jam> (2) <?xml version="1.0" encoding="Shift_JIS" ?> <jam> <java name="helloworld.java"> <import module="あいうえお"/> </java> </jam> >発生した例外のスタックトレースの内容も同じく貼り付けてください すみません。スタックトレースは今はちょっと再現できないので貼り付けられません。 家で試したらエラーが起きないのでかなり焦ってます(^-^; 明日またエラーの出た環境でいろいろ試してみます。

関連するQ&A

専門家に質問してみよう