如何将中文十六进制字符串解码为中文字符或JavaScript?

gru*_*uvy 5 javascript ruby string encoding ruby-on-rails

我正在使用Rails应用程序。

我正在使用返回一些中国省份的API。API以十六进制字符串返回省份,例如:

{ "\xE5\x8C\x97\xE4\xBA\xAC" => "some data" }
Run Code Online (Sandbox Code Playgroud)

我的JavaScript调用了一个返回该哈希值的控制器。我将所有省份字符串放入一个下拉列表,但这些字符串显示为黑色钻石,中间带有问号。我想知道如何将Ruby十六进制字符串转换为实际的中文字符,??? 或者,如果可以,我可以将JavaScript中的十六进制字符串转换为汉字吗?

mu *_*ort 4

字节\\xE5\\x8C\\x97是 的 UTF-8 表示形式\xe5\x8c\x97\\xE4\\xBA\\xAC是 的 UTF-8 表示形式\xe4\xba\xac。所以这个字符串:

\n\n
"\\xE5\\x8C\\x97\\xE4\\xBA\\xAC"\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe5\x8c\x97\xe4\xba\xac字节是否被解释为 UTF-8。您看到的是十六进制代码而不是中文字符,这表明该字符串的编码是二进制的:

\n\n
> s = "\\xE5\\x8C\\x97\\xE4\\xBA\\xAC"\n => "\xe5\x8c\x97\xe4\xba\xac" \n> s.encoding\n => #<Encoding:UTF-8> \n> s.force_encoding(\'binary\')\n => "\\xE5\\x8C\\x97\\xE4\\xBA\\xAC"\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,您正在谈论的这个 API 正在使用 UTF-8,但您的应用程序在某个地方失去了对该字符串应该采用的编码的跟踪。如果你强制编码为 UTF-8 那么问题就消失了:

\n\n
> s.force_encoding(\'utf-8\')\n => "\xe5\x8c\x97\xe4\xba\xac" \n
Run Code Online (Sandbox Code Playgroud)\n\n

您应该在应用程序从远程 API 读取数据的最边缘修复此编码问题。完成后,您关心的所有内容都应该是合理的 UTF-8。这应该可以解决您的 JavaScript 问题,并且 JavaScript 非常乐意使用 UTF-8。

\n