0

以下程序在 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; 
}
4

1 回答 1

1

HPUX 可能不使用 Unicode 作为编码,wchar_t而是在使用 8 位语言环境时将 8位char值简单地存储在 32 位中。wchar_t这是一种丑陋的老式做法,现在通常不受欢迎,但根据 C 标准它是合法的,实际上 C 标准允许并鼓励实现提供预定义的宏__STDC_ISO_10646__来指示wchar_t值是 Unicode。如果您尝试切换到基于 UTF-8 的语言环境并且问题消失了,那么这几乎肯定是您遇到的问题。

于 2012-06-30T01:02:32.377 回答