HPUX上的wcwidth问题:HPUX上的国际化和本地化问题

时间:2012-06-29 14:28:48

标签: c internationalization locale hp-ux

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

1 个答案:

答案 0 :(得分:1)

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