什么类型的字符串使用前缀\ x以及如何读取它

时间:2013-05-23 22:10:32

标签: java string unicode encoding

我有一个像这样的字符串

"\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

谢谢

2 个答案:

答案 0 :(得分:8)

\x03是char

的ASCII十六进制值

所以:"\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'的序列转换为换行符,除非'\'前面有另一个'\'。