Почему putchar () не выводит символ авторского права, а printf ()? - PullRequest
0 голосов
/ 17 февраля 2019

Итак, я хочу напечатать символ авторского права, а putchar () просто обрезает самый старший байт символа, что приводит к непечатному символу.

Я использую Ubuntu MATE и кодировку, которую я используюэто en_US.UTF-8.Теперь я знаю, что шестнадцатеричное значение для © равно 0xc2a9, и когда я пытаюсь использовать putchar ('©' - 0x70), это дает мне 9 с шестнадцатеричным значением 0x39, добавляя к нему 0x70, и вы получите 0xa9, который является наименьшимстарший байт 0xc2a9

#include <stdio.h>

main()
{
    printf("©\n");
    putchar('©');
    putchar('\n');

}

Я ожидаю, что результат будет:

©
©

вместо:

©
�

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы можете попробовать широкую версию: putwchar

Редактировать: Это было на самом деле сложнее, чем я думал.Вот что мне нужно, чтобы это заработало:

#include <locale.h>
#include <wchar.h>
#include <stdio.h>

int main() {
        setlocale(LC_ALL, "");
        putwchar(L'©');
        return 0;
}
0 голосов
/ 17 февраля 2019

Функция putchar принимает аргумент int, а преобразует его в unsigned char, чтобы напечатать .Таким образом, вы не можете передать ему многобайтовый символ.

Вам нужно вызвать putchar дважды, один раз для каждого байта в кодовой точке.

putchar(0xc2);
putchar(0xa9);
...