以下程序在HPUX上返回不正确的值{-1,0,-1},而如果我在Linux上运行相同的程序,则它可以正确地用于语言环境“de_DE.iso885915@euro”。 HPUX wcwidth,iswprint和wcswidth是否存在任何问题。
int main ()
{
wchar_t str[2];
wchar_t ch = 8364; /* Euro sign */
str[0] = ch;
str[1] = '\0';
/* Locale set to de_DE.iso885915@euro before running this program */
setlocale(LC_ALL, "");
printf ("%d\n", wcwidth(ch));
printf ("%d\n", iswprint(ch));
printf ("%d\n", wcswidth(str, 2));
return 0;
}
答案 0 :(得分:1)
HPUX可能不使用Unicode作为wchar_t
的编码,而是在使用8位语言环境时只将8位char
值存储在32位wchar_t
中。这是一种丑陋的老式实践,现在通常不赞成,但它符合C标准,实际上C标准允许并鼓励实现提供预定义的宏__STDC_ISO_10646__
以指示wchar_t
值是Unicode。如果你尝试切换到基于UTF-8的语言环境并且问题消失了,这几乎肯定是你遇到的问题。