nixp.ru v3.0

25 мая 2017,
четверг,
19:22:40 MSK

DevOps с компанией «Флант»
Аватар пользователя rgo
rgo написал 15 июня 2005 года в 07:15 (514 просмотра) Ведет себя неопределенно; открыл 61 тему в форуме, оставил 1602 комментария на сайте.

Почему следующий код, вместо русских букв рисует вопросы? Это я чего-то недопонял, или настройки консоли неправильные?

#define __USE_GNU
#define _GNU_SOURCE
#include 
#include 
#include 
#include 
char koi8r[] = "ф1";
wchar_t wchar[sizeof (koi8r)];
int main ()
{
        iconv_t ic;
        int koi8r_size = sizeof (koi8r);
        int wchar_size = sizeof (wchar);
        char *pkoi8r = koi8r;
        char *pwchar = (char*)wchar;
        ic = iconv_open ("WCHAR_T", "KOI8-R");
        if (ic == (iconv_t)-1) {
                perror ("iconv_open");
        }
        if (iconv (ic, &pkoi8r, &koi8r_size, &pwchar, &wchar_size) == (size_t) -1) {
                perror ("iconv");
        }
        if (fwide (stdout, 1) < 0) {
                perror ("fwide");
        }
        wprintf (L"result: '%S'\n", wchar);
        return 0;
}

кодировка C файла koi8-r, LC_CTYPE=ru_RU.koi8-r, LANG=ru_ru.koi8-r. Если непосредственно выводить строку в koi8-r то всё Ok.

Насколько я понимаю текст `info libc' всё должно работать, но вместо

result: 'ф1'

я получаю

result: '?1'
rgo

да и ещё. вызов iconv срабатывает, строка переводится в wchar_t. На выходе koi8_size == wchar_size == 0;

metal

У меня твоя прога тоже не работает. iconv из консоли тоже не конвертит в WCHAR_T, в utf8 конвертит. Даже UTF8 из программы не получается, что не так не могу понять

rgo

В самом начале надо добавить вызов:

setlocale ("");