为什么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