【问题标题】:How to convert ANSI char ID to Unicode char ID by javascript?如何通过 javascript 将 ANSI char ID 转换为 Unicode char ID?
【发布时间】:2012-08-09 11:54:47
【问题描述】:

函数fromCharCode 不适用于国际ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它会返回特殊字符。如何解决这个问题?

我认为,需要将 ANSI 字符 ID 转换为 Unicode 字符 ID,然后使用 fromCharCode。但是如何将 ANSI char ID 转换为 Unicode char ID(取决于当前的语言环境/代码页)?

非常感谢您的帮助!

【问题讨论】:

  • 您是否使用“ANSI”来表示某些ISO 8859-n 代码集?如果不是,您所说的“俄罗斯 ANSI”是什么意思?如果您正在处理 SBCS(单字节代码集)的字符超出 ASCII(十进制 0-127)范围,那么您必须知道代码集才能将 128-255 范围内的值准确解释为 Unicode人物。也就是说,0xC0 (192) 在 8859-1 和 8859-2 和 8859-3 中具有不同的含义……所以要将 0xC0 或 192 转换为 Unicode 字符,您必须知道您从哪个代码集开始。
  • 我知道应该使用正确的代码页来进行隐蔽。俄罗斯 ANSI 是 CP-1251。
  • 没有“俄美国家标准协会”之类的东西。
  • 三胞胎,但是如何正确书写,cp-1251?
  • @tripleee,责怪 MS 调用 DOS/Windows 模式的 CP OEM 和 ANSI。

标签: javascript unicode keyboard ansi


【解决方案1】:

考虑到您知道数据编码所在的代码页,只需设置一个映射对象,其中键是代码页中的代码,值是正确的 Unicode 符号或数字代码点,并使用它来转换数据。

mapFromCP1251 = {
   192: 'А',
   193: 'Б',
   194: 'В',
   197: 'Е',
   200: 'И',
   204: 'М',
   207: 'П',
   208: 'Р',
   210: 'Т'
   // etc, I don't feel like typing entire http://en.wikipedia.org/wiki/CP1251 here
}

var string = mapFromCP1251[192] + mapFromCP1251[192] + mapFromCP1251[192] + mapFromCP1251[193] + mapFromCP1251[193] + mapFromCP1251[194]
alert(string) // АААББВ
alert(mapFromCP1251[207]+mapFromCP1251[208]+mapFromCP1251[200]+mapFromCP1251[194]+mapFromCP1251[197]+mapFromCP1251[210]+", "+mapFromCP1251[204]+mapFromCP1251[200]+mapFromCP1251[208]+"!") // Hello, world!

【讨论】:

  • @Altaveron,这有点简单。这是一个让您开始的示例。
  • 谢谢。但我需要根据语言环境/代码页进行通用国际转换。
  • @Altaveron,不出所料,这意味着您必须从所有可能的“ANSI”CP 构建整个转换库。实际上,这并不难,因为这些数据中的大部分都可以在线获取,格式很容易解析。然而,这也可能意味着你打错了仗。现代程序通常应该以 Unicode 运行。你到底想做什么?
【解决方案2】:

这是我发现的唯一解决此问题的库: https://github.com/Niggler/js-codepage

但这需要 1.5 MiB。 可能,如果您只需要几个字符集,则需要的时间会少得多。

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2021-12-26
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多