【问题标题】:What kind of string uses prefix \x and how to read it什么样的字符串使用前缀 \x 以及如何读取它
【发布时间】:2013-05-19 10:48:20
【问题描述】:

我有一个这样的字符串

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

谢谢大家的回复 :) 尤其是里卡多 Cacheira

谢谢

【问题讨论】:

  • this 可能有帮助吗?

标签: java string unicode encoding


【解决方案1】:

\x03是char的ASCII十六进制值

所以:"\x30\x31" 与:"01" 相同

查看该页面:http://www.asciitable.com

另一件事是,当您复制不带引号的字符串时,您的 IDE 会将任何 \ 转换为 \\

Java 字符串使用 unicode 转义,因此:"\x30\0x31" 在 java 中是:"\u0030\u0031";

您不能在 Java String \u000a AND \u000d 中使用这些转义序列,您应该将其分别转换为 \r AND \n

所以这个"\u0027\u0018\u00f6,\u0003\u0012\u008e\u00fa\u00ec\u0011\rHL" 是Java 的转换:"\x27\x18\xf6,\x03\x12\x8e\xfa\xec\x11\x0dHL"

【讨论】:

  • 感谢您的回复。有没有一种简单的方法可以读取带有 ascii 编码的字符串?
  • 嗯。我想我的意思是将其转换为普通的 utf-16 字符串,其中 string.charAt(1) == 'ö'
  • 你是说,如果我用 \u00 替换所有 \x 将解决我的问题吗?
  • 嗯。我想我快到了 System.out.println("\\x27\\x18\\xf6,\\x03\\x12\\x8e\\xfa\\xec\\x11\\x0dHL".replaceAll("\ \\\x", "\\\\u00")) 它在控制台中显示 \u0027\u0018\u00f6,\u0003\u0012\u008e\u00fa\u00ec\u0011\u000dHL
  • hmm.. 我的 IDE 不允许我输入 \x27.... 我想当我输入 \\x27 时它知道我的意思是 \x27
【解决方案2】:

apache commons 为此提供了一个助手:

StringEscapeUtils.unescapeJava(...)

对字符串中的任何 Java 文字进行转义。例如,它会将 '\' 和 'n' 的序列转换为换行符,除非 '\' 前面有另一个 '\'。

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    相关资源
    最近更新 更多