我有一个像这样的字符串
"\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
谢谢
答案 0 :(得分:8)
\x03
是char
所以:"\x30\x31"
与:"01"
查看该页面:http://www.asciitable.com
另一件事是当您复制不带引号的字符串时, IDE 会将\
转换为\\
Java String使用unicode转义,因此:"\x30\0x31"
中的"\u0030\u0031"
是:\u000a AND \u000d
;
你不能在Java字符串\r AND \n
中使用这些转义序列,你应该将它们分别转换为"\u0027\u0018\u00f6,\u0003\u0012\u008e\u00fa\u00ec\u0011\rHL"
所以这个"\x27\x18\xf6,\x03\x12\x8e\xfa\xec\x11\x0dHL"
是Java的转换:{{1}}
答案 1 :(得分:1)
apache commons为此提供了一个帮助:
StringEscapeUtils.unescapeJava(...)
Unescapes在String中找到的任何Java文字。例如,它会将'\'和'n'的序列转换为换行符,除非'\'前面有另一个'\'。