使用ICU库的UTF-8到ASCII

时间:2008-10-07 03:14:45

标签: c++ unicode utf-8 transliteration

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

例如:

Łódź=>罗兹
Assunção=>阿松桑
Schloß=>宫

不幸的是,ICU库确实不直观,我没有找到关于其用法的良好文档,因此我需要花费太多时间来学习使用它。时间我没有。

有人可以举一个例子说明如何做到这一点? 感谢。

5 个答案:

答案 0 :(得分:3)

我不知道ICU,但ICONV做到了这一点并且很容易学习。它只需3-4次通话,您需要的是使用ICONV_SET_TRANSLITERATE使用iconvctl()标记。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

ucnv_setFromUCallBack(gConverter, &UCNV_FROM_U_CALLBACK_DECOMPOSE, &status);

然后使用gConverter从unicode转换为ASCII

答案 3 :(得分:0)

这不是我所熟悉的领域,但是如果你没有方便的库,那么你可能更容易创建一个包含UTF的查找表/地图8 - > ASCII值。即。关键是UTF-8字符,值是字符的ASCII序列。

答案 4 :(得分:0)

ß-> ss分解告诉我你想要兼容性分解。在ICU中,您需要使用类Normalizer。之后,你会得到像L'odz'这样的东西。 从该字符串中,您只需删除非ASCII字符即可。不需要ICU,普通STL会这样做。