LINUX.ORG.RU

stdout wchar С

 ,


0

1

wprintf не выводит utf.8 строки. в мане пишется что поток должен быть открыт для wide-char символов. когда я проверяю fwide(stdout, 0) = -1, т.е. открыт для байтовых символов. в мане fwide пишут что если поток уже определен, его нельзя переопределить, можно только закрыть. подскажите, пожалуйста, как открыть stdout для wide-char символов. не могу нагуглить.



Последнее исправление: SmilePlz (всего исправлений: 1)

Могу конечно и ошибаться, но это вроде от настроек терминала зависит. Вообще у меня и обычный printf выводил utf8-строки корректно, если был запущен под эмулятором терминала с соответствующей кодировкой.

cPunk ★★
()
Ответ на: Мне помогло так от gh0stwizard

setlocale(LC_ALL, «ru_RU.UTF-8») и полная лажа wprintf(L"Привет мир!"); не работает выдает -1.

SmilePlz
() автор топика
Ответ на: комментарий от cPunk

у меня стоит ru_RU.UTF-8 и puts(setlocale(LC_ALL, "")); выдает установленную локаль. проблема в stdout.

SmilePlz
() автор топика

Wide-char символы это не UTF-8. Попробуй сделать

freopen ("/dev/tty", "w", stdout);
Тогда стрим закроется и откроется заново, а соответственно ману freopen:

If the ,ccs=string syntax is not specified, the wide-orientation of the stream is determined by the first file operation. If that operation is a wide-character operation, the stream is marked wide-oriented, and functions to convert to the coded character set are loaded.

tim239 ★★
()
Ответ на: комментарий от SmilePlz

wchar не позволяет работать с utf.8?

wchar это не юникод.

cPunk ★★
()
Ответ на: комментарий от SmilePlz
main() {
  char *data;
  readFromFile(data); // если в файле utf-8
  printf(data); // то выведется тут utf-8.
}
invy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.