我正在使用Rails应用程序。
我正在使用返回一些中国省份的API。API以十六进制字符串返回省份,例如:
{ "\xE5\x8C\x97\xE4\xBA\xAC" => "some data" }
我的JavaScript调用了一个返回该哈希值的控制器。我将所有省份字符串放入一个下拉列表,但这些字符串显示为黑色钻石,中间带有问号。我想知道如何将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,但是您的应用程序却在某个地方丢失了该字符串应该编码的信息。如果您将编码强制为UTF-8,那么问题就消失了:
> s.force_encoding('utf-8')
=> "北京"
您应该在应用程序从此远程API读取数据的边缘修复此编码问题。一旦完成,在您关心的所有地方,所有内容都应该是明智的UTF-8。这应该可以解决您的JavaScript问题,并且JavaScript非常乐于使用UTF-8。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句