[英]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.