Почему setlocale дает мне?вместо обычных букв? - PullRequest
0 голосов
/ 16 ноября 2018

Язык программирования: C

IDE: кодовые блоки

Компилятор: GNU GCC Compiler

ОС: Windows 7

Мой cmd по умолчанию имеет кодовую страницу 852, поэтому я решил использовать setlocale (), чтобы установить для него кодовую страницу 437 с помощью

setlocale(LC_ALL, "English_United States.437")

Но при этом некоторые буквы / символы будут отображаться как '?' вместо. Есть ли способ это исправить?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Итак, я нашел 2 решения.

1. Вы можете изменить кодовую страницу системы по умолчанию в панели управления, но для этого потребуется перезагрузить компьютер, что очень непрактично, но вы можете использовать растровые шрифты.

2. Используя "system (" chcp 437 ");" установит для кодовой страницы значение 437, но для отображения символов / символов в виде растровых шрифтов вам потребуется использовать такой шрифт, как «Lucida Console», по какой-то причине невозможно правильно распечатать символы / символы, если вы измените кодовую страницу таким образом.

0 голосов
/ 16 ноября 2018

Обратите внимание на то, что не расширенные символы таблицы ASCII идут от 0 до 127, для работы с расширенными символами используйте wchar_t

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

int main(void)
{
    wchar_t c;

    setlocale(LC_ALL, "English_United States.437");
    for (c = 32; c < 256; c++) {
        wprintf(L"%lc\n", c);
    }
    return 0;
}
...