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

时间:2014-11-25 00:25:29

标签: javascript ruby-on-rails ruby string encoding

我正在开发一个Rails应用程序。

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

{ "\xE5\x8C\x97\xE4\xBA\xAC" => "some data" }

我的JavaScript调用一个返回此哈希的控制器。我将所有省字符串放入下拉列表中,但字符串显示为黑色菱形,中间带有问号。我想知道如何将Ruby十六进制字符串转换为实际的中文字符,北京?或者,如果可能的话,我可以将JavaScript中的十六进制字符串转换为中文字符吗?

2 个答案:

答案 0 :(得分:4)

字节\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。

答案 1 :(得分:0)

我认为你可以这样做:doc RB:

 2.1.2 :002 > require 'uri'
     => true 
    2.1.2 :003 > URI.decode("\xE5\x8C\x97\xE4\xBA\xAC")
     => "北京" 

js:decodeURIComponent(URIstring)