Re[6]: тысяча третий раз про Юникод
От: pepsicoca  
Дата: 14.10.09 13:55
Оценка:
Здравствуйте, Rakafon, Вы писали:

R>Здравствуйте, pepsicoca, Вы писали:

P>>Ну не до такой же степени. Вдумайтесь — Юникод специально был создан, чтобы не переключать локали. И вот после всего этого, чтобы вывести Юникодный символ нужно явно указать локаль? Зачем тогда Юникод было городить?

R>Юникод не был создан, чтобы "не переключать локали". Стандарты юникода были придуманы для создание единой «широкой» кодировки. При этом технически системе, чтобы уметь рисовать символы из определённого диапазона символов юникода (например кириллицу), необходимо иметь соответствующую локаль. При этом для разработчиков прикладного ПО важно просто использовать широкие символы, а то, будут ли они отображаться и как — перекладывается на плечи системы и пользователя, эту систему конфигурирующему: т.е. если приложение работает с испанским, французским, немецкими, русским и китайским языками, то оно просто использует широкие символы (UTF-16) внутри своих алгоритмов (ну или UTF-8 например), в то время как пользователь, ставящий такую софтину должен позаботиться о наличии испанской, французской, немецкой, русской и китайской локализации у себя в системе, иначе рискует ничего не увидеть или увидеть "квадратики" и прочие кракозябры. Вот ты возьми скачай китайскую юникодную софтину и проинсталь у себя и поделись с нами впечатлениями: у тебя же не стоит китайская локаль в системе, правда? Плюс, как теюе тут верно заметили, есть программы, не использующие юникод, для таких тоже есть свои настройки в системе: использование определённой локали. Если юникодной софтине достаточно просто наличие локали в системе, то неюникодную надо носом тыкать, мол юзай вот эту.


Воооот. И я о том же. Если в системе стоят шрифты соответствующего языка, то для wcout это исчерпывающая информация для работы. Для простого cout этого недостаточно, ему нужно еще явно указать, какой именно язык сейчас юзается.

R>Ну и консоль виндовая, походу неюникодная.


А wcout легко может (и должен) сделать ее юникодной. Просто по коду текущего Юникодного символа нужно делать imbue соответствующей локали.

R>



P>>Там уже никто не читает.

R>Да ладно. Я читаю.

А больше никто.

R>



P>>Это верно для std::ofstream. Для std::wofstream ожидаемое поведение не такое. Очевидно, что если std::ofstream работает с файлом как с последовательностью байт char, то std::wofstream должен работать с файлом как с последовательностью широких байт wchar_t.


R>Ничё он не должен: файл как был последовательностью байт, так таковой и остался, и завтра таким же будет. Поэтому если вы ожидаете от std::wofstream такого поведения, это вовсе не означает что он должен это делать так. Я вот ничего такого от него не ожидаю, я ожидаю от него только лишь стандартного поведения. А стандарт С++ заботится о переносимости стандартной С++ библиотеки между платформами.


Тогда скажите, чем отличается std::wofstream от std::ofstream? В Вашей формулировке они не отличаются ничем. Тогда какой смысл иметь std::wofstream, если он ничем не отличатется от std::ofstream?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.