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

How to decode Chinese hex string into Chinese characters or JavaScript?

本文关键字:中文 字符 JavaScript 解码 字符串 十六进制      更新时间:2023-09-26

我正在开发一个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。

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

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

JS: decodeURIComponent(URIstring)