7

私はこのような文字列を持っています

"\x27\x18\xf6,\x03\x12\x8e\xfa\xec\x11\x0dHL"

ブラウザコンソールに配置すると、自動的に別のものになります:

"\x27\x18\xf6,\x03\x12\x8e\xfa\xec\x11\x0dHL"
"'ö,úìHL"

chatAt(x)この文字列を処理すると、次のようになります。

"\x27\x18\xf6,\x03\x12\x8e\xfa\xec\x11\x0dHL".charAt(0)
"'"
"\x27\x18\xf6,\x03\x12\x8e\xfa\xec\x11\x0dHL".charAt(1)
""
"\x27\x18\xf6,\x03\x12\x8e\xfa\xec\x11\x0dHL".charAt(2)
"ö"

これは私が欲しいものです。

ここで、ブラウザと同じ方法で文字列を読み取る Java プログラムを実装したいと考えています。

問題は、Java がこの文字列のエンコード方法を認識しないことです。代わりに、通常の文字列として扱います。

"\\x27\\x18\\xf6,\\x03\\x12\\x8e\\xfa\\xec\\x11\\x0dHL".charAt(0) == '\'
"\\x27\\x18\\xf6,\\x03\\x12\\x8e\\xfa\\xec\\x11\\x0dHL".charAt(1) == 'x'
"\\x27\\x18\\xf6,\\x03\\x12\\x8e\\xfa\\xec\\x11\\x0dHL".charAt(2) == '2'

この文字列はどのようなエンコーディングでエンコードされていますか? プレフィックスを使用するエンコーディングの種類は何\xですか? 正しく読み取る方法はありますか (ブラウザと同じ結果が得られます)。

更新:解決策を見つけました->それは最善ではないと思いますが、私にとってはうまくいきます:

StringEscapeUtils.unescapeJava("\\x27\\x18\\xf6,\\x03\\x12\\x8e\\xfa\\xec\\x11\\x0dHL".replace("\\x", "\\u00"))

返信ありがとうございます :) 特に Ricardo Cacheira

ありがとうございました

4

2 に答える 2

1

Apache Commons は、このためのヘルパーを提供します。

StringEscapeUtils.unescapeJava(...)

文字列で見つかった Java リテラルのエスケープを解除します。たとえば、'\' の前に別の '\' がない限り、'\' と 'n' のシーケンスを改行文字に変換します。

于 2013-05-23T22:22:49.900 に答える