Можно ли изменить кодировку кодировки в C? - PullRequest
2 голосов
/ 21 октября 2019

Я бы хотел, чтобы моя программа на C печатала знаки из другой кодировки, а не из таблицы ASCII, как это по умолчанию. Например, я хочу напечатать символы в диапазоне [200,250] из кодировки ISO-8859. Это вообще возможно? Как должен быть установлен компилятор? Заранее спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Задание локали и использование широких символов:

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

int main(void) 
{
    setlocale(LC_CTYPE, "");

    for (wchar_t c = 200; c < 250; c++)
    {
        wprintf(L"%lc", c);
    }
    wprintf(L"\n");
    return 0;
}

Вывод:

ÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øù
0 голосов
/ 21 октября 2019

На самом деле функции C не заботятся о кодировании, поэтому, если у вас есть такой код:

#include <stdio.h>

int main( void )
{
    printf( "Hällo Wörld\n" );
    return( 0 );
}

Он выведет «Germanzied» «Hello World» точно в кодировке Cисходный файл, независимо от настроек системы и т. д. То же самое верно, конечно, если вы печатаете строки, которые вы читаете из файла. Если вы хотите перекодировать строки (скажем, из UTF-8 в ISO-8859), вам нужно сделать это вручную или найти подходящую библиотеку

...