(在 StackOverflow 上已经提出了类似的问题,但不完全是这个。最近的可能是“ javascript how to convert unicode string to ascii ”,其中已经有“this has to be a dup[licate]”的注释。我已经阅读了一些类似的帖子,但他们没有回答我的具体问题。我查看了非常好的W3Schools网站,也搜索了它,但也没有找到答案。所以这里的任何提示都会非常重要赞赏。)
我有一个字节数组被传递给一段 JavaScript。在 JavaScript 中,数据以字符串形式到达。我不知道传输机制,因为它来自第 3 方应用程序。我什至不知道字符串是“宽”还是“窄”。
在我的 JavaScript 中,我有一些类似b = str.charCodeAt(pos);
.
我的问题是 0x86 = 134 之类的字节值以字符 0x2020 = 8224 的形式出现。这似乎是因为我的原始字节被解释为 Latin-1(可能)“匕首”字符,然后被翻译成等效的 Unicode 代码点。(问题可能是也可能不是 JavaScript 的“错误”。)其他值也会出现类似的问题,尽管范围 0x00..0x7F 和 0xA0..0xFF 似乎没问题,但 0x80..0x9F 中的大多数值都会受到影响,在每种情况下的值似乎都是原始 Latin-1 的 Unicode。
另一个观察结果是,如果长度以字节为单位,那么字符串的长度就是我对窄字符串的期望。(另一方面,如果长度返回一个抽象字符的值,这并不能告诉我任何事情。)
那么,在 JavaScript 中,有没有办法获取字符串中的“原始”字节,或者直接获取 Latin-1 或 ASCII 字符代码,或者在字符编码之间进行转换,或者定义默认编码?
我可以编写自己的映射,但我不想这样做。我希望这就是我最终会做的事情,但那感觉就像一个杂物。
我还在研究调用应用程序中是否有什么可以调整的(因为它可能将数据作为宽字符串传递,尽管我对此表示怀疑)。
不过,无论哪种方式,我都会对是否有简单的 JavaScript 解决方案感兴趣,或者想了解为什么没有。
(如果传入的数据是字符数据,那么自动处理 Unicode 会很棒。但它不是,它只是一个二进制数据流。)
谢谢。