我编写了一个个人Web应用程序,它使用charCodeAt()将用户输入的文本转换为相关的字符代码(例如⊇转换为8839进行存储),然后将其发送到Perl,后者将它们发送到
MySQL .要检索输入文本,应用程序使用fromCharCode()将数字转换回文本.
我选择这样做是因为Perl的unicode支持很难正确处理.所以Perl和MysqL只能看到数字,这让生活变得更加简单.
我的问题是我可以依赖于fromCharCode()来始终将类似8834的数字转换为相关字符吗?我不知道它使用什么标准,但是假设它使用UTF-8,如果将来改为使用UTF-16,如果没有向后兼容性,这显然会破坏我的程序.
我知道我对这些概念的看法并不是那么清楚,因此请注意澄清我是否表现出误解.
解决方法
假设所有字符都在基本多语言平面(BMP)中,fromCharCode和tocharCode处理Unicode代码点,即0到65535(0xffff)之间的数字. Unicode和代码点是永久性的,因此您可以信任它们永远保持不变.
诸如UTF-8和UTF-16之类的编码采用代码点(数字)流并输出字节流. JavaScript有点奇怪,根据UTF-16规则,BMP之外的字符必须通过两次调用tocharCode来构造.但是,几乎你遇到的每一个角色(包括中文,日文等)都在BMP中,所以即使你不处理这些案例,你的程序也会有效.
您可以做的一件事是将数字转换回字节(以big-endian int16格式),并将结果文本解释为UTF-16. fromCharCode和tocharCode的行为在当前的JavaScript实现中是固定的,不会改变.