我的设置:glibc 2.24,gcc 6.2.0,UTF-8环境。为什么wctype.h中的函数不能在没有setlocale()的情况下工作?
请看下面的例子:
#include <wchar.h>
#include <wctype.h>
#include <locale.h>
int main(void)
{
setlocale(LC_CTYPE, "en_US.UTF-8");
wchar_t wc = L'я'; /* 00000100 01001111 */
if (iswlower(wc)) return 0;
return 1;
}
编译并运行它:
$ gcc test.c
$ ./a.out; echo $?
0
现在除去setlocale()
并再次运行。其结果是不同的:从技术上讲,在这里不需要
$ gcc test.c
$ ./a.out; echo $?
1
setlocale()
,因为从与宽字符,其具有固定的编码wctype.h
功函数。 (不用说,setlocale()
是必需的,如果我们想从ctype.h
功能与非ASCII字符正常工作,如果我们用字符转换函数从wchar.h - 设置外部编码)
为什么没有按范例没有setlocale()
?
如何知道要使用哪个字母? –
@ IgnacioVazquez-Abrams ISO10646 - 它适用于宽字符。 https://www.gnu.org/software/libc/manual/html_node/Extended-Char-Intro.html –
ISO 10646没有命名字母表。 –