宽字符音译C与towctrans

时间:2014-04-02 19:42:43

标签: c utf-8

我想将(音译)UTF-8字符转换为C中最接近的ASCII匹配字符。ú之类的字符被音译为u。我可以在命令行上使用iconviconv -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函数。

1 个答案:

答案 0 :(得分:1)

虽然标准允许通过wctrans进行实现定义或语言环境定义的转换,但我不知道任何提供此类功能的现有实现,并且它当然不普遍。 iconv //TRANSLIT方法也是非标准的,实际上与标准冲突:POSIX要求包含斜杠字符的字符集名称被解释为charmap文件的路径名,因此使用斜杠指定translit-mode是不符合的。