【发布时间】:2019-10-02 15:58:29
【问题描述】:
我正在使用 iconv 的 transliterate 函数将 unicode 字符串转换为最接近的 ASCII 等价物。但是,该字符串包含一些没有 ASCII 等效符号的符号。我想保留这些符号而不丢弃它们。
目前,这是我正在做的事情:
iconv_t cd = iconv_open("ASCII//IGNORE//TRANSLIT", "UTF-8");
const char *utf8 = "ç ß ∑ a";
char* in = const_cast<char*>(utf8);
size_t in_bytes = strlen(in);
char buf[BUFSIZ] = {};
char* out = buf;
size_t out_bytes = sizeof(buf);
iconv(cd, &in, &in_bytes, &out, &out_bytes);
printf("%s", buf);
// prints
c ss a
如何配置 iconv 以产生如下输出:
c ss ∑
如果 iconv 无法做到这一点,有没有办法以编程方式实现这一点?
【问题讨论】:
-
来自文档:“iconv 函数一次转换一个多字节字符”
-
这似乎是一件很奇怪的事情:D 你打算用这个有趣的功能做什么?
-
嗯,首先,您发布的命令不会在我的机器上产生该输出,而是出错(可能删除
//IGNORE?)。其次,iconv只是一个简单的命令行实用程序,在 C 程序中,您应该能够尝试自己翻译每个 Unicode 代码点并查看结果。你写了什么没用?您应该添加相关的 C 代码。 -
我已经添加了实际代码。