用于编码转换的 Iconv 库有什么好的替代方案吗?
我在 Ruby 上使用 Iconv 库将编码从 UTF-8 转换为 UTF-32、UTF-16 等,效果非常好。
但是,在从 Big5 转换为 UTF-8 时,我确实看到了一个问题——无效序列会引发异常……
而当从 CP950 转换为 UTF-8 时,问题就消失了,其中 CP950 本质上是 Big5。 ..
所以我想知道除了使用 Iconv 之外是否还有其他好的选择? 或者说CP950是Big5的更好版本?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看看 ICU,它是一个可以进行字符转换等操作的库。
另一方面,其他答案表明您可能需要更仔细地检查您的编码。
Have a look at ICU, it's a library that does character conversions among other things.
On the other hand, the other answers suggest you might need to examine your encodings more carefully.
尽管Big5和CP950几乎相同,但还是有区别。 在 Unicode 网站上有用于将不同编码转换为 Unicode 的参考文件,您将看到 Big5 和 CP950 不同。 我对 Iconv 的体验很好 - 我怀疑它的行为可能是正确的。
在 CP950 中找到但 Big5 中没有的一些字符具有十六进制值:
0x00、0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08、0x09、0x0A、0x0B、0x0C、0x0D、0x0E、0x0F、 0x10、0x11、0x12、0x13、0x14、0x15、0x16、0x17、0x18、0x19、0x1A、0x1B、0x1C、0x1D、0x1E、0x1F、0x20、0x21、0x22、0x23、 24、0x25、0x26、0x27、0x28、 0x29、0x2A、0x2B、0x2C、0x2D、0x2E、0x2F、0x30、0x31、0x32、0x33、0x34、0x35、0x36、0x37、0x38、0x39、0x3A、0x3B、0x3C、 3D、0x3E、0x3F、0x40、0x41、 0x42、0x43、0x44、0x45、0x46、0x47、0x48、0x49、0x4A、0x4B、0x4C、0x4D、0x4E、0x4F、0x50、0x51、0x52、0x53、0x54、0x55、 56、0x57、0x58、0x59、0x5A、 0x5B、0x5C、0x5D、0x5E、0x5F、0x60、0x61、0x62、0x63、0x64、0x65、0x66、0x67、0x68、0x69、0x6A、0x6B、0x6C、0x6D、0x6E、 6F、0x70、0x71、0x72、0x73、 0x74、0x75、0x76、0x77、0x78、0x79、0x7A、0x7B、0x7C、0x7D、0x7E、0x7F、0x80、0x81、0x82、0x83、0x84、0x85、0x86、0x87、 88、0x89、0x8A、0x8B、0x8C、 0x8D、0x8E、0x8F、0x90、0x91、0x92、0x93、0x94、0x95、0x96、0x97、0x98、0x99、0x9A、0x9B、0x9C、0x9D、0x9E、0x9F、0xA0、 A1、0xA15A、0xA1C3、0xA1C5、0xA1FE、 0xA240、0xA3E1、0xA2CC、0xA2CE。 如果您的任何输入包含这些值,则该文件不是有效的 Big5。
Although Big5 and CP950 are almost the same there are differences. On the Unicode website there are reference files for converting different encodings to Unicode, you will see that Big5 and CP950 are different. My experience of Iconv has been good - I suspect its behavior may be correct.
Some of the characters found in CP950 but not Big5 have the hex values:
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA15A, 0xA1C3, 0xA1C5, 0xA1FE, 0xA240, 0xA3E1, 0xA2CC, 0xA2CE
. If any of your input contains these values, then the file is not valid Big5.big5 有很多变体。 CP950只是其中之一。
http://www.moztw.org/docs/big5/
对于big5,我会建议使用“big5-2003”,这是官方更新版本。
There are many many big5 variants. CP950 is just one of them.
http://www.moztw.org/docs/big5/
For big5, I would suggest use "big5-2003", which is official updated version.