我有一个带有 UTF-8 字符的 std::string 。
我想用 ASCII 字符将字符串转换为最接近的等价物。
例如:
Łódź => Lodz
Assunção => Assuncao
Schloß => Schloss
不幸的是 ICU 库真的很不直观,我还没有找到关于它的使用的好的文档,所以我要花太多时间来学习使用它。我没有的时间。
有人可以举一个关于如何做到这一点的小例子吗?
谢谢。
我有一个带有 UTF-8 字符的 std::string 。
我想用 ASCII 字符将字符串转换为最接近的等价物。
例如:
Łódź => Lodz
Assunção => Assuncao
Schloß => Schloss
不幸的是 ICU 库真的很不直观,我还没有找到关于它的使用的好的文档,所以我要花太多时间来学习使用它。我没有的时间。
有人可以举一个关于如何做到这一点的小例子吗?
谢谢。
试试这个,ucnv_convert("US-ASCII", "UTF-8", targer, targetsize, source, sourcesize, pError)
我不了解 ICU,但 ICONV 可以做到这一点,而且它很容易学习。它只有大约 3-4 次调用,您需要的是ICONV_SET_TRANSLITERATE
使用iconvctl()
.
我写了一个分解然后做一些替换的回调。它可能可以作为音译来实现。代码在这里decompcb.c并且标题在附近。在 Unicode 到 ASCII 转换器上按如下方式安装它:
ucnv_setFromUCallBack(gConverter, &UCNV_FROM_U_CALLBACK_DECOMPOSE, &status);
然后使用 gConverter 将 unicode 转换为 ASCII
ß->ss 分解告诉我您想要兼容性分解。在 ICU 中,您需要 Normalizer 类。之后,你会得到像 L'odz' 这样的东西。从此字符串中,您可以简单地删除非 ASCII 字符。不需要ICU,普通的STL就可以了。
这不是我擅长的领域,但是如果您没有方便的库来轻松为您完成它,那么您最好创建一个包含 UTF-8 的查找表/映射 -> ASCII 值。IE。键是 UTF-8 字符,值是字符的 ASCII 序列。