- PR -

文字化け

1
投稿者投稿内容
kotaro01
会議室デビュー日: 2002/10/23
投稿数: 2
投稿日時: 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/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2002-10-23 18:58
引用:

問題ですが、XMLパーサーを利用し、プログラム内で生成した
XMLをShift_JISとしてファイルに書き出すのですが、
全角記号文字の〜という文字が?に化けてしまいます。

環境 --------------------------------
OS : windows 2000
JDK : 1.4
パーサー : jaxp 1.1 (crimson, xalan)
-------------------------------------




MS932の"〜"とShift_JISの"〜"では対応するUnicodeが違います。
Javaにおける文字化けについて等が参考になるかと思います。
Output側に対してMS932という文字コード指定をしてやれば*とりあえずは*上手くいくかと思います。
ひろ
常連さん
会議室デビュー日: 2001/12/13
投稿数: 36
投稿日時: 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でのやりとりも参考になるかと。

しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 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

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