Re[2]: Зачем вообще нужна wprintf?
От: soolitarY  
Дата: 13.01.11 10:16
Оценка:
Здравствуйте, мыщъх.

Мне ничего не в лом. Возможно, с эпитетами для кодировки я, конечно, перегнул. Я только начинаю изучать С\С++ и хочу разобраться раз и на всегда с выводом в Виндовскую Консоль. В Линуксе Баш в Юникоде работает, на сколько мне известно, — там всё кристально ясно, выводи не хочу. А в Винде крозябры разные, но проблемы, всё равно, острой, как таковой нет — мне очень нравится WinAPI функция CharToOem(), решающая все мои проблемы.

мыщъх, Вы писали:
А>> если это китайская винда вообще?
Сам я не использую тру-тайп шрифт, т.к. прогу запускаю из MS VS, а там по-умолчанию стоит стандартный консольный шрифт. А менять шрифт консоли из своей программы, я пока не умею. А Стандартный консольный шрифт китайские буквы не выводит, даже при соответствующей Локали(проверял).

мыщъх, Вы писали:
А>> вы вообще в курсе, что под виндой отродясь есть команда CHCP ?!
system("chcp 1251"); — слышал. при стандартном шрифте выводит кракозябры.

мыщъх, Вы писали:
А>> вывод в консоль вообще-то не самая тривиальная операция... особенно если мы пишем не только под винду...
Я пока пишу только под Винду, и меня интересует эта тема.

Теперь непосредственно к вопросу. Почему я говорил про сп1251 — все файлы(с которыми я работаю) находятся в данной кодировке, она удобная в отношении расположения символов, и каждый символ занимает один байт(вычисление длинны, передача в потоки и т.д.).
При переходе на Юникод возникают, по моему скромному мнению, проблемы с величиной символа — он теперь 2 байтовый, всю целиком таблицу перед глазами иметь не получится и пр. И переходя на него, должны быть какие-то серьезные причины, оправдывающие неудобства. Так вот, какие причины могут быть для использования wprintf для вывода? зачем-то же ее сделали?
wprintf работает исключитльно с консолью, переводит уникодные символы в чаровые, соответственно Локали(на сколько я осведомлен) и никакого выйгрыша как бы нет?
напр, что написать
setlocale(LC_ALL,"rus");
printf("Привет!");

что на Уникоде
setlocale(LC_ALL,"rus");
wprintf(L"Привет!"); (но теперь "Привет!" весит х2 и длинной х2)

но выйгрыш же наверно есть?
wprintf() windows c c++
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.