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標準では、実装が事前定義されたマクロを提供して、値がUnicode__STDC_ISO_10646__であることを示すことができます。wchar_tUTF-8ベースのロケールに切り替えようとして問題が解決した場合、これはほぼ確実に発生している問題です。

于 2012-06-30T01:02:32.377 に答える