繁体   English   中英

是否有适用于任何语言/国家/地区的UTF-8语言环境?

[英]Is there a UTF-8 locale for ANY language/country?

我正在C语言中编程,并且希望所有UTF(即“ ru_RU-UTF-8”,“ en_EN-UTF-8”等)都可以继续并转换为wchar_t版本(使用mbrtowc函数)。 只要将其转换为特定的wchar_t ,即使在某些本地有效的wchar_t无关紧要。

我可以将“ UTF-8-无论如何”设置传递给语言环境吗?

就像我在寻找setlocale("POSIX") / setlocale("C")的正好相反。

澄清一下,C代码...

setlocale(LC_ALL, "ru_RU.UTF-8");
stuff = mbrtowc(..... )

可以在C代码...

setlocale(LC_ALL, "en_US.UTF-8");
stuff = mbrtowc(..... )

击中西里尔字母后立即返回-1 我正在处理的东西也可能有日语字符等。

C语言环境和wchar函数的问题在于它们高度依赖平台。 对于它的价值,我在Linux(Ubuntu 16.04)上使用en_US.UTF-8语言环境将西里尔UTF-8转换为wchars没有问题。 以下代码

#include <locale.h>
#include <stdio.h>
#include <wchar.h>

int main() {
    const char in[] = "\xD0\xB1";
    wchar_t out;
    size_t consumed;

    setlocale(LC_ALL, "en_US.UTF-8");
    consumed = mbrtowc(&out, in, sizeof(in) - 1, NULL);
    if (consumed > 0) {
        printf("%04x\n", (unsigned)out);
    }

    return 0;
}

版画

0431

如预期的那样。 在其他平台上,您的里程可能会有所不同。 带有Windows等16位wchar_t平台wchar_t问题。 但是明智的平台应该能够使用任何UTF-8语言环境对所有Unicode字符进行编码和解码,因此不需要通用的UTF-8语言环境。

如果您只想使用UTF-8,则应考虑进行UTF-8转换的库,例如iconv,utf8proc,libunistring或ICU。 您也可以编写自己的转换例程。 不太难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM