- - PR -
JavaでXMLを扱う時の文字コードについて
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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-10-12 21:17
XML文書を取り込む際には、文書の先頭にある
<?xml version="1.0" encoding="${エンコーディング名}"?> を、必ず最初に参照します。 XML文書の文字コードを、${エンコーディング名}に合わせて、保存できていますか??? |
|
投稿日時: 2001-10-15 15:06
返答ありがとうございます。
ファイル自体は、ただしくエンコーディングできています。 Windows/Solarisそれぞれのプラットフォームのデフォルトエンコード (Shift_JIS/EUC-JP)でXML,DTDを作成した場合は、正常にパースできて います。 また、最初の書きこみ以降こちらでもいろいろと調べているのですが、 どうもJVMのバージョンにもよるような情報を得ることが出来ました。 (ただし、問題は相変わらず解決していません。。。) とりあえず、Javaで文字コードとencoding="XXX" をプラットフォームの デフォルトエンコードに変換して対応することを考えています。 (試しにやってみたらうまくいっています。) |
|
投稿日時: 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-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-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-10-15 19:47
フォローありがとうございます。
使っているのは、富士通の XML SDK という製品です。 http://software.fujitsu.com/jp/xmlsdk/ |
|
投稿日時: 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 ] |
