Почему wcwidth возвращает -1 со знаком, что я могу печатать на терминале?

Почему здесь wcwidth вернуть "-1" (не для печати широких символов) ширина "Ԥ" (0x0524)?

#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

1 ответ

Решение

Скорее всего, U+0524 не был допустимым символом при создании вашей базы символов libc. Это было добавлено в Unicode 5.2. Ваш шрифт может уже содержать символ, но wcwidth не смотрит, какой шрифт используется.

Другие вопросы по тегам