JMeterの文字化けポイント
なんで文字化けすんのかしらべてみたら,なんのことはない.JMeterってURLエンコードやデコードを"UTF-8"でやってるからなのね.そして犯人は,このヒトたち.
::URLエンコードしてるヒトたち:: HTTPArgument.getEncodedName() (org.apache.jmeter.protocol.http.util) HTTPArgument.getEncodedValue() (org.apache.jmeter.protocol.http.util) EncoderCache.getEncoded(String) (org.apache.jmeter.protocol.http.util) JOrphanUtils.encode(String, String) (org.apache.jorphan.util) ::URLデコードしてるヒトたち:: HtmlParsingUtils.isAnchorMatched(HTTPSamplerBase, HTTPSamplerBase) (org.apache.jmeter.protocol.http.parser) HTTPArgument.HTTPArgument(String, String, boolean) (2 usages) (org.apache.jmeter.protocol.http.util) JOrphanUtils.decode(String, String) (org.apache.jorphan.util)
JOrphanUtilsを呼んでるところで,しっかり"UTF-8"ってハードコードしてあった.:-D
#JDK1.4.x使うと標準APIのURLEncoderやURLDecoderを使うらしい.
んじゃ,この部分を"Shift_JIS"とか"Windows-31J"にすれば,やっつけパッチの出来上がりか?と思ってやってみたら,半分アタリで半分ハズレだった.
確かに日本語になるんだけど,一部びみょ〜に文字化けしてるところがある...
試しにWebブラウザがURLエンコードした文字列を,URLEncoder.encode(str, "SJIS")でエンコードしてみたら,こうなった.
元の文字列:対象データが見つかりません。 Webブラウザのエンコード結果: %91%CE%8F%DB%83f%81%5B%83%5E%82%AA%8C%A9%82%C2%82%A9%82%E8%82%DC%82%B9%82%F1%81B URLEncoderの結果: %91%CE%8F%DB%83%66%81%5B%83%5E%82%AA%8C%A9%82%C2%82%A9%82%E8%82%DC%82%B9%82%F1%81%42
ありゃま結果違うでやんの.
このサイトとかで試してみると,エンコード結果は,Webブラウザとおんなじだった.
んで,不思議(?)なことに,このサイトだとどっちのエンコード文字列も正しくデコードできるんだよね.
ちなみに,URLDecoder.decode(str, "SJIS")で,Webブラウザのエンコード文字列をデコードすると,
対象?fータが見つかりません?B
となった.URLエンコードなんか知るか〜.専門外じゃ.
#( ゜Д゜) ギャボー
とりあえず,もちっと賢い(?)URLエンコーダ・デコーダを見つけてくれば,やっつけパッチが作れそうだ.
#だれか教えてくり.
(追記)上記「Webブラウザの...」はIEでエンコードした内容.Firefoxだとこうなった.
%91%CE%8F%DB%83f%81%5B%83%5E%82%AA%82%A0%82%E8%82%DC%82%B9%82%F1%81B