我想将(音译)UTF-8字符转换为C中最接近的ASCII匹配字符。ú
之类的字符被音译为u
。我可以在命令行上使用iconv
和iconv -f utf-8 -t ascii//TRANSLIT
来完成此操作。
在C中,有一个函数towctrans
可以做到这一点,但我只找到了关于两种可能音译的文档:小写和大写(参见man wctrans
)。在文档中,wctrans依赖于LC_CTYPE。但是,除了" tolower"和#34; toupper"以外,还有哪些功能可用于特定的LC_CTYPE值?
一个简单的例子,用towctrans和基本的toupper音译:
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
wchar_t frase[] = L"Amélia"; int i;
setlocale(LC_ALL, "");
for (i=0; i < wcslen(frase); i++) {
printf("%lc --> %lc\n", frase[i], towctrans(frase[i], wctrans("toupper")));
}
}
我知道我可以使用libiconv进行此转换,但我试图找出可能已定义的wctrans
函数。
答案 0 :(得分:1)
虽然标准允许通过wctrans
进行实现定义或语言环境定义的转换,但我不知道任何提供此类功能的现有实现,并且它当然不普遍。 iconv
//TRANSLIT
方法也是非标准的,实际上与标准冲突:POSIX要求包含斜杠字符的字符集名称被解释为charmap文件的路径名,因此使用斜杠指定translit-mode是不符合的。