Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Кракозяблы вместо кирилицы в двухбайтовых символах


Автор: Compositum 21.2.2013, 22:05
Доброго времени суток. Изучаю C. Хочу написать код, который создаёт текстовый файл, с некоторым содержимым в формате Utf-8. Моя попытка выглядит так:

Код

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[]) {
    
    wchar_t *s1 = L"Привет, мир!\n";
    wchar_t *s2 = L"Hello, World!";
    
    FILE *fp = fopen("./hello.txt", "w");
    
    fputws(s1, fp);
    fputws(s2, fp);
    
    fclose(fp);
    
    exit(EXIT_SUCCESS);
}

Однако открыв в gedit результат, вижу это:

Код

??????, ???!
Hello, World!

Почему вместо кирилицы кракозяблы?

Спасибо.

Автор: Arks 22.2.2013, 00:14
Здравствуйте.

Дело в кодировках. Видимо нерусская кодировка по-умолчанию стоит в системе.

Перед работой с файлом ставим русскую кодировку:
Код

const char* current = setlocale(LC_CTYPE, "ru_RU.UTF-8");


После работы меняем на старую:

Код

setlocale(LC_CTYPE, current);

Автор: Compositum 22.2.2013, 13:55
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)