2013-05-04 10 views
4

왜 여기 wcwidth은 "-1"(인쇄 가능한 와이드 문자가 아님) 너비 "Ԥ"(0x0524)를 반환합니까?wcwidth가 터미널에서 인쇄 할 수있는 기호와 함께 -1을 반환하는 이유는 무엇입니까?

#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 
+0

다른 문서에서는 로캘이 중요하다는 것을 알 수 있습니다. 그 중 어떤 아이디어라도 동일/현재 지역의 유효 와이드 문자 모두입니까? – xaxxon

+0

집 모양의 16 진수 값은 무엇입니까? – xaxxon

+0

@ xaxxon : LANG = de_DE.UTF-8 –

답변

3

아마도 libc 문자 데이터베이스를 만들 때 U + 0524가 유효하지 않습니다. 그것은 유니 코드 5.2에서 추가되었습니다. 글꼴에 이미 문자가 포함되어 있지만 wcwidth은 어떤 글꼴이 사용되는지를 보지 않습니다.

+0

유니 코드 버전의 libc는 어떻게 찾을 수 있습니까? –

+0

@sid_com 불행히도, libc 문서 및/또는 출처를 확인하고 주석으로 포함되기를 기대하기보다는 더 좋은 방법을 알지 못합니다. – hvd