2015-08-05 3 views
2

Вот моя простая программа C/C++:Правильный способ fprintf Юникода

int main() { 
    FILE* f = fopen("MyTest.log", "w"); 

    fprintf(f, "%ls\n", L"abc"); 
    fprintf(f, "%ls\n", L"您好"); // Data from a different locale 
    fprintf(f, "%ls\n", L"def"); 
    fclose(f); 

    return 0; 
} 

Когда я запускаю эту программу, сгенерированный файл не содержит среднюю линию на всех. Оказывается, fprintf просто возвращается назад, когда обнаруживает другой набор символов в переданном параметре.

Я протестировал эту программу на Windows, а также на Ubuntu. Та же проблема в обоих местах.

Просмотрев форум, я нашел несколько советов, таких как использование _setmode() и fwprintf. Однако, если это возможно, я хотел бы придерживаться fprintf(). Кроме того, мой код должен работать как на Windows, так и на Linux.

Кто-нибудь знает, для достижения этой цели? С уважением.

+0

Имея не-ASCII символы в исходном коде не является переносимым и различным ком Пилицы справляются с этим по-другому. –

+0

Для компиляторов Windows исходный файл ** должен иметь спецификацию **. В Linux такого требования нет. –

+0

Какую кодировку должен использовать целевой файл? –

ответ

0

Я думаю, вам нужно установить локаль первым, чтобы получить его работать правильно ..

Смотрите этот вопрос для получения дополнительной информации

Why doesn't printf format unicode parameters?

вы можете использовать набор UTF-8 символ, если ваши персонажи есть в этом ...

Printing UTF-8 strings with printf - wide vs. multibyte string literals

Смежные вопросы