调用一个网站接口读取帖子时发现标题名称返回的是变态这样的类型,该怎么进行处理
这个是 XML 字符实体, 他有两种形态 &#XXXX;
和 &#xXXXX;
分别指的是 10 进程和 16 进程.
比较正式的方法是: 把他们用正则替换成 unicode 字符再处理. (伪)
喜欢看文档的戳这里
http://www.w3.org/TR/REC-xml/#sec-physical-struct
没人指出 @苏生 的错误吗? 虽然是可用的, 但是不够严谨.
http://refiddle.com/12q2
字符匹配
使用正确字符匹配, 并不能够正确完成.
(正则分号缺失. 正确字符匹配请戳上面文档)
匹配不严谨
a. 无效16进程会被匹配. 例如 &#xS3D8;
.
b. 缺失 10 进程
下面是根据 @苏生 的答案基础修改完成的
decodeER = (string) ->
return undefined unless string?
string.replace /&#([0-9]+);/g, (str, p1) ->
String.fromCharCode p1
.replace /&#x([0-9a-fA-F]+);/g, (str, p1) ->
String.fromCharCode parseInt p1, 16
我一直用一种有点 hacking 的方法:
var fakeDecoder = document.createElement('textarea');
fakeDecoder.innerHTML = '态';
console.log(fakeDecoder.value); // "变"
不确信这样的方式靠谱不靠谱,也期待比较正经点的解决方案。
这不就是UTF-8形式的汉字吗?
后台直接使用也应该可以吧。
不过,我似乎没遇到过这样UTF-8字符。是不是LZ你没setEncoding啊?
比如:
var req = https.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function(data) {
var json = JSON.parse(data);
...
})
});
其实UTF-8也是Unicode的一种啊。
手动把变
换成\u53D8
也应该没问题吧