函数fromCharCode
不适用于国际 ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它会返回特殊字符。如何解决这个问题?
我认为,需要将 ANSI 字符 ID 转换为 Unicode 字符 ID,然后使用fromCharCode
. 但是如何将 ANSI 字符 ID 转换为 Unicode 字符 ID(取决于当前的语言环境/代码页)?
非常感谢您的帮助!
函数fromCharCode
不适用于国际 ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它会返回特殊字符。如何解决这个问题?
我认为,需要将 ANSI 字符 ID 转换为 Unicode 字符 ID,然后使用fromCharCode
. 但是如何将 ANSI 字符 ID 转换为 Unicode 字符 ID(取决于当前的语言环境/代码页)?
非常感谢您的帮助!
考虑到您知道编码数据的代码页,只需设置一个映射对象,其中键是代码页中的代码,值是正确的 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!
这是我发现的唯一解决此问题的库: https ://github.com/Niggler/js-codepage
但它需要 1.5 MiB。可能,如果您只需要几个字符集,则需要的时间会少得多。