[Seasar-user:16312] [Dolteng] Teedaのページクラス作成時の文字コード
あきら
[E-MAIL ADDRESS DELETED]
2008年 11月 18日 (火) 17:02:35 JST
あきらです
DoltengのTeeda用ページクラス作成ウイザードなのですが
xml宣言がない場合にはシステムの文字コードで処理されております。
これをeclipseで設定されている文字コードで処理するようにはでき
ないでしょうか?
==================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:te="http://www.seasar.org/teeda/extension">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form id="form">
<div>
<span id="str">Test</span>
<input type="button" value="編集" />
</div>
</form>
</body>
</html>
==================================================
上記の場合には先頭にXML宣言があるので正しくutf-8で処理されます。
先頭のXML宣言をはずすとWindows上の場合SJISとしてパースされて
しまいますので、"編集" の部分が "邱ィ髮・ として処理され、正常に
閉じられていないのでページクラスのプロパティーが取得できません。
" 編集 " など前後にスペースをいれるや、XML宣言をすれば正しく動く
のですが、xhtmlのXML宣言はIE6で互換モード扱いになったりして、
デザイン系のサイトの場合には使いにくい状況です。
Doltengのソースをみたところ、以下のライブラリの中で処理を
しておりました。ここは外部ライブラリなのでされません。
===========================================
jp.aonir.fuzzyxml.FuzzyXMLParser.java
===========================================
/**
* 入力ストリームからXMLドキュメントをパースします。
* 文字コードはXML宣言にしたがって判別されます。
*
* @param in 入力ストリーム
* @return パース結果
* @throws IOException
*/
public FuzzyXMLDocument parse(InputStream in) throws IOException {
byte[] bytes = FuzzyXMLUtil.readStream(in);
String encode = FuzzyXMLUtil.getEncoding(bytes);
if (encode == null) {
return parse(new String(bytes));
}
return parse(new String(bytes, encode));
}
===========================================
そこでDolteng側の読み込み部分でEclipseの文字コードを
セットして処理にしてもらうことはできませんでしょうか?
===========================================
org.seasar.dolteng.eclipse.plugin\src\main\java\org\seasar\dolteng\eclipse\util
FuzzyXMLUtil.java
===========================================
public static FuzzyXMLDocument parse(IFile file) throws IOException,
CoreException {
FuzzyXMLParser parser = new FuzzyXMLParser();
FuzzyXMLDocument doc = parser.parse(new BufferedInputStream(file
.getContents(true)));
return doc;
}
これがデフォルトのソースですが、下が変更案です
public static FuzzyXMLDocument parse(IFile file) throws IOException,
CoreException {
FuzzyXMLParser parser = new FuzzyXMLParser();
byte[] bytes = readStream(new BufferedInputStream(file
.getContents(true)));
String encode = getEncoding(bytes);
if (encode == null) {
encode = file.getCharset();
}
FuzzyXMLDocument doc = parser.parse(new String(bytes, encode));
return doc;
}
===========================================
すみません、コンパイルしていません。。。
IFileをInputStreamを渡した場合、FuzzyXMLUtilの関数でString
に変換してからパースしなおしているので、StringまでDolteng
側で処理をした後に渡せればXML宣言ない場合でも動いてくれる
のかなと期待しています。
あきら
Seasar-user メーリングリストの案内