【发布时间】:2010-10-30 17:17:37
【问题描述】:
您可能认为这很容易获得,但我很难找到一个简单的库函数,它将 C 或 C++ 字符串从 ISO-8859-1 编码转换为 UTF-8。我正在读取采用 8 位 ISO-8859-1 编码的数据,但需要将其转换为 UTF-8 字符串以用于 SQLite 数据库并最终用于 Android 应用程序。
我找到了一款商业产品,但目前超出了我的预算。
【问题讨论】:
-
没有什么简单的。您可以使用开源 ICU 库。
-
如果必须这样做,那么最简单的代码是预先生成一个表,其中包含 128 个(左右)UTF-8 字符对应于设置了最高位的 8859-1 个字符。其他 128 个 8859-1 字符未修改。这样,您的代码根本不必理解 Unicode。另外,请注意 ISO-8859-1 和 Windows CP-1252 之间的区别。后者有一些额外的字符,其中 8859-1 有间隙(未使用的代码点)。除非您应该验证您的输入确实是 ISO-8859-1,否则不接受 CP-1252 是没有意义的,因为您会看到它被贴错标签。
-
@Steve:由于 UTF-8 是可变长度的(在这种情况下,每个字符 1 或 2 个字节),查找表并不那么容易使用。请参阅我的答案,它应该同样快速且简单得多。
-
@R.:嗯,“简单”是一个相对术语。
stpcpy有帮助,前提是你是那种擅长缓冲区大小的程序员。 -
stpcpy(即使它是标准的或现在正朝着标准的方向发展..?)对于 1 字节和 2 字节副本来说是一个巨大的开销。如果复制的字节为 0(几乎可以肯定是无分支的),你最好总是复制 2 个字节(手动)并包含一些代码来跳过第二个指针前进。