我有一个用 big5 编码的 XML 字符串:
atob('PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYmlnNSIgPz48dGl0bGU+pKSk5TwvdGl0bGU+')
(<?xml version="1.0" encoding="big5" ?><title>中文</title>
以 UTF-8 格式。)
我想提取内容<title>
。如何在浏览器中使用纯 Javascript 来做到这一点?最好有没有 jquery 或 emscripten 的轻量级解决方案。
试过DOMParser
:
(new DOMParser()).parseFromString(atob('PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYmlnNSIgPz48dGl0bGU+pKSk5TwvdGl0bGU+'), 'text/xml')
但 Chromium 和 Firefox 都不尊重编码属性。这是一个标准吗DOMParser
只支持UTF-8?
我怀疑问题不是DOMParser
, but atob
,它无法正确解码最初的非 ASCII 字符串。*
您将需要使用另一种方法来获取原始字节,例如使用https://github.com/danguer/blog-examples/blob/master/js/base64-binary.js https://github.com/danguer/blog-examples/blob/master/js/base64-binary.js
var encoded = 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYmlnNSIgPz48dGl0bGU+pKSk5TwvdGl0bGU+';
var bytes = Base64Binary.decode(encoded);
然后使用某种方法将字节转换(即解码 big5 数据)为 Javascript 字符串。对于 Firefox / Chrome,您可以使用TextDecoder
:
var decoder = new TextDecoder('big5');
var decoded = decoder.decode(bytes);
然后传递给DOMParser
var dom = (new DOMParser()).parseFromString(decoded, 'text/xml');
var title = dom.children[0].textContent;
你可以在以下位置看到这个https://plnkr.co/edit/TBspXlF2vNbNaKq8UxhW?p=preview https://plnkr.co/edit/TBspXlF2vNbNaKq8UxhW?p=preview
*理解原因的一种方法:atob
不将原始字符串的编码作为参数,因此虽然它必须在内部将 Base64 编码的数据解码为字节,但它必须假设这些字节的字符编码是什么,然后为您提供一个 Javascript 字符串,该字符串我相信内部编码为 UTF-16。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)