- - PR -
文字化け
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2002-10-23 18:09
どなたか対処方法をご存知でしたらご教授お願いします。
問題ですが、XMLパーサーを利用し、プログラム内で生成した XMLをShift_JISとしてファイルに書き出すのですが、 全角記号文字の〜という文字が?に化けてしまいます。 環境 -------------------------------- OS : windows 2000 JDK : 1.4 パーサー : jaxp 1.1 (crimson, xalan) ------------------------------------- 下記に具体的なソースと出力結果ファイルを掲載します。 [ソース]====================================================================== import java.io.*; import javax.xml.parsers.*; import org.w3c.dom.*; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.TransformerConfigurationException; public class Test { public static void main(String args[]) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); Element testEl = document.createElement("TEST"); Text testTx = document.createTextNode( "テスト〜テスト" ); testEl.appendChild(testTx); document.appendChild(testEl); // ▼▼▼▼▼ [出力] ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ File f = new File("test.xml"); FileOutputStream fos = new FileOutputStream(f); TransformerFactory tff = TransformerFactory.newInstance(); Transformer tf = tff.newTransformer(); tf.setOutputProperty("encoding", "Shift_JIS"); tf.setOutputProperty("indent", "yes"); tf.setOutputProperty("doctype-system", "http://www.test.co.jp/test.dtd"); tf.transform(new DOMSource(document), new StreamResult(fos)); fos.flush(); fos.close(); // ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ } catch(Exception e){ e.printStackTrace(); } } } ============================================================================== [ 出力結果 ]================================================================== <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE TEST SYSTEM "http://www.test.co.jp/test.dtd"> <TEST>テスト?テスト</TEST> ↑ ここが化けてしまう... ============================================================================== 以上です、お忙しい中、申し訳ありませんがよろしくお願いします。 同じ投稿内容で、XML eXpert eXchangeの方にも投稿させてもらっています。 | ||||
|
投稿日時: 2002-10-23 18:58
MS932の"〜"とShift_JISの"〜"では対応するUnicodeが違います。 Javaにおける文字化けについて等が参考になるかと思います。 Output側に対してMS932という文字コード指定をしてやれば*とりあえずは*上手くいくかと思います。 | ||||
|
投稿日時: 2002-10-23 19:48
j2sdk1.4.1からShift_JISのエイリアスが変更になっています。
http://java.sun.com/j2se/1.4.1/ja/changes.html#Shift-JIS NTT 未来ネット研究所風間一洋氏のサイトが参考になると思います。 JavaHouseでのやりとりも参考になるかと。 | ||||
|
投稿日時: 2002-10-24 01:24
XML のお約束としては、MS932 ではなく Windows-31J を使った方がよいでしょう。
でも &xxxx; という参照になってしまうかもしれません。 jdk 1.4.1/1.4.1_01 でも、内蔵されている xalan が「Windows-31J」を扱えません。 Sun にパッチ付きバグレポートは出したので、もしかすると次は fix されるかも。 # 前にもいっぺん出したんですがね。なんだかどこがどうなってるのやら。 それにしても、世の中のほとんどの HTML/XML 関係の書籍は「Shift_JIS」にしか 触れてないんですけど、いいんですかねぇ。機種依存文字扱えなくて。 たまに、charset=IBM943C なんていう苦肉の策を使ったサイトも見かけますが。 [ メッセージ編集済み 編集者: しょむ 編集日時 2002-10-24 01:24 ] | ||||
1
