- PR -

JavaでXMLを扱う時の文字コードについて

投稿者投稿内容
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-10-12 16:45
XML SDK (Java)を使って、XML文書をパースするとパーサエラーとなって
いるのですが、私なりにいろいろ調べてみたところ、どうもプラット
フォームのデフォルトの文字コード以外の文字コードで記述したXML文書
をパースしようとしてもパーサはいうことを聞いてくれないようです。

#ただし、なぜかXML SDK (C言語)のほうは、エラーとなっていません。
#JavaはSAXパーサ、CのほうはDOMのパーサを使っているという違いは
#ありますが。。。

[参考URL]
http://www.t3.rim.or.jp/~yoko-k-h/java/servlet/programming/BBSbyServletAndXML.html

確かに私の場合も、最初Shift_JISで作ったXML文書をWindows98でパースしていた
時にはちゃんと動いていたのですが、いざSolarisに持っていくとパーサがエラー
を返してきています。XML文書をUTF-8にしてやってみると、WindowsでもSolaris
でもパーサエラーとなっています。


Webアプリケーションであれば、クライアントは限定できないので
これは非常に困るような気がします。
(単純な私のミスであればよいのですが)


実際にそういう現象にあわれた方、(逆に)同じようなことをやっているが
そんなことは起きていないという方、対処方法をご存知の方がいらっしゃれば
アドバイスをお願いいたします。


ちなみにXMLのパーサおよびSDKは、富士通製のものを使っています。

#XMLの会議室にしようか、こっちにしようか迷った挙句、こっちにしました。。。
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-10-12 21:17
XML文書を取り込む際には、文書の先頭にある
  <?xml version="1.0" encoding="${エンコーディング名}"?>
を、必ず最初に参照します。

XML文書の文字コードを、${エンコーディング名}に合わせて、保存できていますか???
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-10-15 15:06
返答ありがとうございます。

ファイル自体は、ただしくエンコーディングできています。
Windows/Solarisそれぞれのプラットフォームのデフォルトエンコード
(Shift_JIS/EUC-JP)でXML,DTDを作成した場合は、正常にパースできて
います。

また、最初の書きこみ以降こちらでもいろいろと調べているのですが、
どうもJVMのバージョンにもよるような情報を得ることが出来ました。
(ただし、問題は相変わらず解決していません。。。)

とりあえず、Javaで文字コードとencoding="XXX" をプラットフォームの
デフォルトエンコードに変換して対応することを考えています。
(試しにやってみたらうまくいっています。)
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-10-15 15:53
ご使用のXML Parser が、日本語向けのEncoding(Shift_JIS/EUC-JP/JIS/UTF-8,etc.)を正式サポートしているという前提で回答します。

encoding="XXX" を無視し、JVM の DefaultEncoding でないと Document を Parse できないということであれば、XML Parser のバグである可能性が高いということです。

ためしに、JAXP や Xerces を使って、テストしてみたらどうでしょう。
これらの製品でうまく動作すれば、完全に XML Parser の問題といっていいです。

[ メッセージ編集済み 編集者: 謎の白覆面 編集日時 2001-10-16 19:16 ]
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-10-15 17:14
すばやいへんとうありがとうございます。

現在使用している富士通のXMLのパーサですが、下記の[文字コード変換について]の通り、
JavaVMのバージョンに依存するようです。

JAXP や Xerces などは、そういった制限はないのでしょうか?
(私が最初に紹介したURLを見る限りありそうですが・・・)

とりあえず時間がないので、無理やり対応しようとしています。
時間が出来たら JAXP や Xerces も試してみたいと思います。

ありがとうございました。

[文字コード変換について]
コード変換は、 Java エンコーディングの機能に依存します。また、サポートされる動作条件は利用している JavaVM のバージョンによって異なります。

Shift_JIS のデフォルトエンコーディングは、"MS932" です。Javaエンコーディングとして、"SJIS" を使いたい場合は、システムプロパティに以下の指定を行ってください。

"com.fujitsu.xml.encoding.Shift_JIS","SJIS"
[ここまで]

ちなみに
System.setProperty("com.fujitsu.xml.encoding.Shift_JIS","SJIS");
としても一緒でした。

おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-10-15 17:34
ちなみに、何というXML Parserですか???

JAXP や Xerces のように、オープン化されていない製品だと思いますので、
そちらの業務上で差し支えがなければ、ぜひ紹介してください。
(使ってみたいという意図は、あまりないですが・・・)

> JAXP や Xerces などは、そういった制限はないのでしょうか?
> (私が最初に紹介したURLを見る限りありそうですが・・・)
Javaで対応されているすべてのEncodingをサポートしているわけではないと思いますが、
・ Shift_JIS ( SJIS )
・ EUC-JP
・ ISO-2022-JP
・ UTF-8
のIANAに関しては、特に問題ないです。
ただし、XML上の「Shift_JIS」に対応する文字セットは「MS932」ではなく「SJIS」です。
ここだけお間違えなく...。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-10-15 19:47
フォローありがとうございます。

使っているのは、富士通の XML SDK という製品です。

http://software.fujitsu.com/jp/xmlsdk/

おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-10-16 18:08
「サポートされるエンコーディングは、動作するJavaVMに依存する。」
と公表しているのなら、Sun JDK-国際化版 を使用したときには、
・ Shift_JIS ( SJIS )
・ EUC-JP
・ ISO-2022-JP
・ UTF-8
が、きちんと対応されていると解釈できるような・・・。

Default Encoding しか対応しないなら、
「サポートされるエンコーディングは、動作するプラットホームに依存する。」
とコメントすべきですね。

ただし、UTF-8への対応は必須だと思いますので、これを標準でサポートしないと
ちょっと問題かもしれません。


[ メッセージ編集済み 編集者: 謎の白覆面 編集日時 2001-10-16 19:20 ]

スキルアップ/キャリアアップ(JOB@IT)