2015-04-21 3 views
0

Пример кода:Почему я не могу напечатать символ юникода в c с помощью wchar_t?

int main(int argc, char *argv[]){ 
    int x = sizeof(wchar_t); 
    printf("%i\n",x); 
    wchar_t t = 0x011E; 
    printf("%c\n\n",t); 
    wchar_t a = 0x0041; 
    printf("%c\n\n",a); 
} 

, который будет печатать:

4 


A 

0x011E является UTF-16 code для персонажа изб. Почему он не печатается?

+1

Я считаю, что вам нужен '% lc' для' wchar'. Возможно, вам придется использовать 'wprintf'. –

+0

Во-первых: спецификация преобразования ''% c "' ожидает значение типа 'char', а не значение типа' wchar_t'. Вы вызываете Undefined Behavior, передавая значения неправильного типа 'printf()'. Также вам нужно '#include ' для правильного прототипа для 'printf()' – pmg

+1

Это может зависеть от вашей среды (в частности, операционной системы, компилятора и т. Д.). Обычно терминалом (например, на большинстве Linux) является UTF-8 закодирован. –

ответ

0

Когда вы печатаете символ, вы на самом деле просто отправляете его код на консоль. и консольный рендерер интерпретирует этот код со своей собственной таблицей символов. поэтому вы должны использовать ту же кодировку в своем исходном коде и в консоли.

Если вы запускаете окна, см. here, как изменить кодировку в cmd.exe.

 Смежные вопросы

  • Нет связанных вопросов^_^