- - PR -
DOMのXSLT化で文字化け?@linux
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-10-03 19:12
JDK5.0、Tomcat5.5上で動かしております。
DBのデータからXMLを作成し、SOAP経由でウィンドウズクライアントに文字列を 返しています。 import javax.xml.transform でDOMを文字列化しています。 今まではウィンドウズ上で動かしており問題はなかったのですが、 今回Linuxサーバ上に移動したところ全角文字がすべて"?"に化ける ようになってしまいました。 化けている状態をのを確認した箇所は、ウィンドウズクライアントが サーバから受け取ったXMLをファイルにはいたもの、および、 javaがはいているXML文字列のログファイル(出力エンコードはTransForm時の ものと同じものを指定)です。二つのファイルともまったく同じように化けています。 DOMに入れる前の化けるデータをWin側に直接返してやると化けていませんでした。 そこで化ける原因はTransform時にあると思い至りました。 DOMはタグ名をstatic finalなStringで定義し、中のデータはOracleから とってきています。 Oracleの文字列はNVARCHAR2に入っており、NCHAR系のキャラセットは AL16UTF16になります。 setOutputPropertyでセットするエンコードをwindows-31Jだけでなく、 Shift-JIS、EUC-JP、UTF-8、UTF-16等で試してみましたが、化け方はそれぞれ違いますが、全部化けてしまいました。 DBからとってきた文字データを別の文字コードに変換する必要などがあるのでしょうか? かなりお手上げの状態にいます。 <CODE> public static String convert2String(Document doc)throws EccException { String strRetXML = ""; TransformerFactory factory = TransformerFactory.newInstance(); Transformer tr = factory.newTransformer(); //インデントを行う tr.setOutputProperty(OutputKeys.INDENT, "yes"); tr.setOutputProperty(OutputKeys.METHOD, "xml"); tr.setOutputProperty(org.apache.xml.serializer.OutputPropertiesFactory.S_KEY_INDENT_AMOUNT, "2"); //〜が化けるのでwindows-31J String strENC = "windows-31j"; tr.setOutputProperty(OutputKeys.ENCODING, strENC); //DOMソース DOMSource source = new DOMSource(); source.setNode(doc); //退避ストリーム ByteArrayOutputStream buffOut = new ByteArrayOutputStream(); Result result = new StreamResult(buffOut); tr.transform(source, result); strRetXML = buffOut.toString(); buffOut.close(); //"windows-31J"をむりやり"Shift-JIS"に変換 strRetXML = strRetXML.replaceFirst(strENC, "Shift_JIS"); System.out.println(strRetXML); return(strRetXML); 以下略 </CODE> |
1