Вот моя простая программа 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.
Кто-нибудь знает, для достижения этой цели? С уважением.
Имея не-ASCII символы в исходном коде не является переносимым и различным ком Пилицы справляются с этим по-другому. –
Для компиляторов Windows исходный файл ** должен иметь спецификацию **. В Linux такого требования нет. –
Какую кодировку должен использовать целевой файл? –