牛尾です。
先日から、皆さんから教えていただいたHttpUnitをテストで使っていたので
すが、テーブルのCellの中身のデータを取得するWebResponseのgetTablesと
いうメソッドでどうしても文字化けしてしまうので、HttpUnitのソースを
2クラス位いじるとやっとこさ動くようになりました。
HttpUnitを使ってる他の方々は文字化け問題はどうやって回避したの
でしょうか?やっぱりソース直してるのですか?それとももっと
いい方法があるのでしょうか?
あと、もし同じ問題で悩んでる人がいたら、、ということで、
一応私の修正したポイントなんかメール末につけときます。。
ソースはめちゃダサですが。サーバがShift_JISの例です。
#MLではXPの本のことが盛んにかかれていますね。あ〜早く手にいれてぇ。
・HttpUnitのクラス
-----------ReceivedPage.java
private static Tidy getParser() {
Tidy tidy = new Tidy();
// JTidyはUTF-8,ISO2022に対応しているがそれらを指定してもダメ。
tidy.setCharEncoding(org.w3c.tidy.Configuration.RAW);
tidy.setQuiet( true );
tidy.setShowWarnings( HttpUnitOptions.getParserWarningsEnabled() );
return tidy;
}
---------------------------
-----------WebResponse.java
private String _characterSet = "Shift_JIS"; // 一応変えた。
private static String getResponseText( URL url,
URLConnection connection ) {
StringBuffer sb = new StringBuffer();
try {
// getInputStreamがデフォルトエンコーディングだったので明示化
BufferedReader input = new BufferedReader(
new InputStreamReader(connection.getInputStream() ,"Shift_JIS") );
----------------------------
・テストの記述例
----------------------TestAp(sample)
WebResponse response;
...
String [][] customers = response.getTables()[0].asText();
String customerJP = getShiftJIS(customers);
assertEquals("XXXX",customersJP[1][1]); // XXXX is Japanese
assertEquals("????",customersJP[2][1]); // ???? is Japanese
assertEquals("****",customersJP[3][1]); // **** is Japanese
}
...
// 面倒くさいのでString [][]の中身を文字変換するメソッドを作成。
// コーディングはしょぼい。
private String [][] getShiftJIS(String [][] shiftJis){
int arrayFirst = shiftJis.length;
int arraySecond = shiftJis[0].length;
int i,l;
String [][] retString = new String[arrayFirst][arraySecond];
for(i = 0 ; i < arrayFirst ; i++){
for(l = 0 ; l < arraySecond ; l++){
try{
retString[i][l] =
new String(shiftJis[i][l].getBytes("8859_1"),
"Shift_JIS");
}catch (Exception e){
}
}
}
return retString;
}
...