QA@IT
«回答へ戻る

引用ミス修正。

0
 自己解決できたようです。
 
-``java
+```java
 FileInputStream is = ...;
 Document document = documentBuilder.parse(is);
-``
+```
 
 というように直接バイナリの入力ストリームを parser にかけていたのですが、これを
 
-``java
+```java
 FileInputStream is = ...;
 InputStreamReader isr = new InputStreamReader(is, "UTF-8");
 InputSource source = new InputSource(isr);
 Document document = documentBuilder.parse(source);
-``
+```
 
 とすることで、例外が発生しないようになりました。 DOM でなく SAX についても同様です。
 javax.xml.parsers 関連は Apache の Xerces からひっぱってきていると思われますが、この内部でバイナリー→テキスト変換をするところがおそらくバグっているのではないかと思われます。

自己解決できたようです。

FileInputStream is = ...;
Document document = documentBuilder.parse(is);

というように直接バイナリの入力ストリームを parser にかけていたのですが、これを

FileInputStream is = ...;
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
InputSource source = new InputSource(isr);
Document document = documentBuilder.parse(source);

とすることで、例外が発生しないようになりました。 DOM でなく SAX についても同様です。
javax.xml.parsers 関連は Apache の Xerces からひっぱってきていると思われますが、この内部でバイナリー→テキスト変換をするところがおそらくバグっているのではないかと思われます。
バイナリー→テキスト変換を java.io.InputStreamReader の方に任せることによって回避できたのではないかと考えます。

crmlpudding さん、コメントありがとうございました。確かにメモリを食うのも問題ではあるので、少し検討してみたいと思います。

自己解決できたようです。

```java
FileInputStream is = ...;
Document document = documentBuilder.parse(is);
```

というように直接バイナリの入力ストリームを parser にかけていたのですが、これを

```java
FileInputStream is = ...;
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
InputSource source = new InputSource(isr);
Document document = documentBuilder.parse(source);
```

とすることで、例外が発生しないようになりました。 DOM でなく SAX についても同様です。
javax.xml.parsers 関連は Apache の Xerces からひっぱってきていると思われますが、この内部でバイナリー→テキスト変換をするところがおそらくバグっているのではないかと思われます。
バイナリー→テキスト変換を java.io.InputStreamReader の方に任せることによって回避できたのではないかと考えます。

crmlpudding さん、コメントありがとうございました。確かにメモリを食うのも問題ではあるので、少し検討してみたいと思います。

回答を投稿

自己解決できたようです。

java
FileInputStream is = ...;
Document document = documentBuilder.parse(is);

というように直接バイナリの入力ストリームを parser にかけていたのですが、これを

java
FileInputStream is = ...;
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
InputSource source = new InputSource(isr);
Document document = documentBuilder.parse(source);

とすることで、例外が発生しないようになりました。 DOM でなく SAX についても同様です。
javax.xml.parsers 関連は Apache の Xerces からひっぱってきていると思われますが、この内部でバイナリー→テキスト変換をするところがおそらくバグっているのではないかと思われます。
バイナリー→テキスト変換を java.io.InputStreamReader の方に任せることによって回避できたのではないかと考えます。

crmlpudding さん、コメントありがとうございました。確かにメモリを食うのも問題ではあるので、少し検討してみたいと思います。

自己解決できたようです。

``java
FileInputStream is = ...;
Document document = documentBuilder.parse(is);
``

というように直接バイナリの入力ストリームを parser にかけていたのですが、これを

``java
FileInputStream is = ...;
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
InputSource source = new InputSource(isr);
Document document = documentBuilder.parse(source);
``

とすることで、例外が発生しないようになりました。 DOM でなく SAX についても同様です。
javax.xml.parsers 関連は Apache の Xerces からひっぱってきていると思われますが、この内部でバイナリー→テキスト変換をするところがおそらくバグっているのではないかと思われます。
バイナリー→テキスト変換を java.io.InputStreamReader の方に任せることによって回避できたのではないかと考えます。

crmlpudding さん、コメントありがとうございました。確かにメモリを食うのも問題ではあるので、少し検討してみたいと思います。