5

我有一个带有 UTF-8 字符的 std::string 。
我想用 ASCII 字符将字符串转换为最接近的等价物。

例如:

Łódź => Lodz
Assunção => Assuncao
Schloß => Schloss

不幸的是 ICU 库真的很不直观,我还没有找到关于它的使用的好的文档,所以我要花太多时间来学习使用它。我没有的时间。

有人可以举一个关于如何做到这一点的小例子吗?
谢谢。

4

5 回答 5

4

试试这个,ucnv_convert("US-ASCII", "UTF-8", targer, targetsize, source, sourcesize, pError)

于 2008-11-13T08:32:38.780 回答
3

我不了解 ICU,但 ICONV 可以做到这一点,而且它很容易学习。它只有大约 3-4 次调用,您需要的是ICONV_SET_TRANSLITERATE使用iconvctl().

于 2008-10-07T04:21:57.953 回答
1

我写了一个分解然后做一些替换的回调。它可能可以作为音译来实现。代码在这里decompcb.c并且标题在附近。在 Unicode 到 ASCII 转换器上按如下方式安装它:

ucnv_setFromUCallBack(gConverter, &UCNV_FROM_U_CALLBACK_DECOMPOSE, &status);

然后使用 gConverter 将 unicode 转换为 ASCII

于 2009-10-07T17:48:18.653 回答
0

ß->ss 分解告诉我您想要兼容性分解。在 ICU 中,您需要 Normalizer 类。之后,你会得到像 L'odz' 这样的东西。从此字符串中,您可以简单地删除非 ASCII 字符。不需要ICU,普通的STL就可以了。

于 2008-10-07T11:56:18.847 回答
0

这不是我擅长的领域,但是如果您没有方便的库来轻松为您完成它,那么您最好创建一个包含 UTF-8 的查找表/映射 -> ASCII 值。IE。键是 UTF-8 字符,值是字符的 ASCII 序列。

于 2008-10-07T04:25:24.657 回答