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