使用ICU库将UTF-8转换为ASCII

UTF-8 to ASCII using ICU Library

本文关键字:ASCII 转换 UTF-8 ICU 库将 使用      更新时间:2023-10-16

我有一个std::字符串,其中包含UTF-8字符。
我想将字符串转换为最接近ASCII字符的字符串。

例如:

Łód罗兹=>罗兹
Assunção=>Assuncao
Schloß=>Schloss

不幸的是,ICU图书馆真的很难理解,而且我还没有找到关于它使用的好文档,所以我需要太多时间来学习使用它。我没有时间。

有人能举一个例子说明如何做到这一点吗
谢谢

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

我不知道ICU,但ICONV可以做到这一点,而且很容易学习。它只需要大约3-4个调用,在您的情况下,您需要使用iconvctl()来使用ICONV_SET_TRANSLITERATE标志。

我写了一个回调,它分解,然后进行一些替换。它可能被实现为音译。代码在这里反编译,头在附近。在Unicode到ASCII转换器上安装如下:

ucnv_setFromUCallBack(gConverter, &UCNV_FROM_U_CALLBACK_DECOMPOSE, &status);

然后使用gConverter将unicode转换为ASCII

这不是我擅长的领域,但如果你手边没有一个库可以轻松完成这项工作,那么你最好只创建一个包含UTF-8->ASCII值的查找表/映射。即。键是UTF-8字符,值是ASCII字符序列。

ss分解告诉我你想要兼容性分解。在重症监护室,你需要类Normalizer。之后,你会得到一些像"欧兹"这样的东西。从这个字符串中,您可以简单地删除非ASCII字符。无需ICU,普通STL即可。