我正在开发 Rails 应用。
我正在使用返回一些中国省份的 API。 API 以十六进制字符串返回省份,例如:
{ "\xE5\x8C\x97\xE4\xBA\xAC" => "some data" }
我的 JavaScript 调用一个返回此散列的 Controller 。我将所有省份字符串放入下拉列表中,但字符串显示为中间带有问号的黑色菱形。我想知道如何将 Ruby 十六进制字符串转换为实际的汉字北京?或者如果可能的话,我可以将JavaScript中的十六进制字符串转换成汉字吗?
最佳答案
字节\xE5\x8C\x97
是北
的UTF-8表示,\xE4\xBA\xAC
是UTF -8 代表京
。所以这个字符串:
"\xE5\x8C\x97\xE4\xBA\xAC"
如果字节被解释为 UTF-8,则 是 北京
。您看到的是十六进制代码而不是中文字符表明该字符串的编码是二进制的:
> s = "\xE5\x8C\x97\xE4\xBA\xAC"
=> "北京"
> s.encoding
=> #<Encoding:UTF-8>
> s.force_encoding('binary')
=> "\xE5\x8C\x97\xE4\xBA\xAC"
因此,您正在与之交谈的 API 正在使用 UTF-8,但您的应用程序在某处丢失了该字符串应该采用的编码方式。如果你force the encoding成为 UTF-8 那么问题就消失了:
> s.force_encoding('utf-8')
=> "北京"
您应该在应用程序从该远程 API 读取数据的最边缘解决此编码问题。一旦完成,所有你关心的地方都应该是合理的 UTF-8。这应该可以解决您的 JavaScript 问题,而且 JavaScript 很乐意使用 UTF-8。
关于javascript - 如何将中文十六进制字符串解码为汉字或JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27116725/