Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么wcwidth返回-1并带有一个可以在终端上打印的符号?_C_Unicode_Printing_Widechar - Fatal编程技术网

为什么wcwidth返回-1并带有一个可以在终端上打印的符号?

为什么wcwidth返回-1并带有一个可以在终端上打印的符号?,c,unicode,printing,widechar,C,Unicode,Printing,Widechar,为什么这里wcwidth返回“-1”(不是可打印的宽字符)宽度“Ԥ”(0x0524) #包括 #包括 #包括 内部宽度(wchar_t wc); int main() { setlocale(LC_CTYPE,“”); wchar_t wc1=L'合'; // 0x5408 int width1=wcwidth(wc1); printf(“%lc-打印宽度:%i\n”,wc1,宽度1); wchar_t wc2=L'Ԥ';//0x0524 int width2=wcwidth(wc2); pri

为什么这里
wcwidth
返回“-1”(不是可打印的宽字符)宽度“Ԥ”(0x0524)

#包括
#包括
#包括
内部宽度(wchar_t wc);
int main()
{
setlocale(LC_CTYPE,“”);
wchar_t wc1=L'合'; // 0x5408
int width1=wcwidth(wc1);
printf(“%lc-打印宽度:%i\n”,wc1,宽度1);
wchar_t wc2=L'Ԥ';//0x0524
int width2=wcwidth(wc2);
printf(“%lc-打印宽度:%i\n”,wc2,width2);
返回0;
}
输出:
合 - 打印宽度:2
Ԥ-打印宽度:-1

在创建libc字符数据库时,U+0524很可能不是有效字符。它是在Unicode 5.2中添加的。您的字体可能已经包含该字符,但是
wcwidth
没有查看使用的字体。

我在文档中看到的另一点是,区域设置很重要。知道这两个字符在同一/当前区域中都是有效的宽字符吗?房屋外观形状的十六进制值是多少?@xaxxon:LANG=de_de.UTF-8@sid_com不幸的是,我不知道还有什么比检查libc文档和/或源代码更好的方法,希望能将其作为一条评论。
#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int wcwidth(wchar_t wc);

int main()
{
    setlocale(LC_CTYPE, "");

    wchar_t wc1 = L'合'; // 0x5408
    int width1 = wcwidth(wc1);
    printf("%lc - print width: %i\n", wc1, width1);

    wchar_t wc2 = L'Ԥ'; // 0x0524
    int width2 = wcwidth(wc2);
    printf("%lc - print width: %i\n", wc2, width2);

    return 0;
}

Output:

合 - print width: 2
Ԥ - print width: -1