|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.03.2015, 16:55 | #1 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Добрый день.
Например, имеем открытый файл через std:: ofstream. Далее устанавливаем различные локали через http://www.cplusplus.com/reference/ios/basic_ios/imbue/. Далее пишем в файл. Вопрос: на что будет влиять локаль? Будет ли изменяться кодировка в файле? Желательно подробное перечисление зависимых параметров. Естественно я читаю справочники и статьи, но чего-то пока плохо доходит, воды много. http://habrahabr.ru/post/107679/ Например, имеем: 1. Три файла: utf-8, utf-16, utf-32 2. Строка в исходнике "строка" 2. Консоль. Задача: прочитать текст из трёх файлов, соединить в одно целое + строка из исходника и вывести в консоль. Как мы это будем делать (в общих словах)? Какая кодировка внутри программы? Зачем нужен Wide string (wchar_t) с непонятной кодировкой? В любом случаи нужна одна кодировка в программе, какая? wchar_t не подходит т.к. его кодировка неизвестна (какой будет строка L"строка"?). Если так, то зачем нужен wcout (какой в нём смысл? печатать текст из исходников)? Ладно, внутренней кодировкой выберем utf-32. Как его выводить в консоль? Создавать новый поток? Почему в С++ нет уже открытого потока принимающего чётко определенную кодировку (например, utf-32)? Последний раз редактировалось Stilet; 08.03.2015 в 16:14. |
08.03.2015, 14:39 | #2 | ||||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
Цитата:
Цитата:
Почему без кодировки? Ну а какую выбрали б вы? utf16? utf32? be? le? shift-jis? ..? И вообще этот тип больше для совместимости и локальных программ оставили. Можно юзать, например, char32_t. Цитата:
Юзайте, basic_ostream<char32_t> Последний раз редактировалось Stilet; 08.03.2015 в 16:14. |
||||
08.03.2015, 15:04 | #3 | |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Цитата:
В win 2 байта, в linux 4. Т.е. это что-то непонятное, зачем оно нужно не понимаю. Лучше сделать стандартный поток utf-32. А под конкретную консоль (в случаи необходимости) перекодируем. Для каких реальных задач нужен wchar_t? Т.е. с обеспечением переносимости. А если оно такое кривое, то зачем по умолчанию создавать wide версии потоков? Даже кодировка не известноа ни разу не встречал упоминания. |
|
08.03.2015, 15:35 | #4 | ||||||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
||||||
08.03.2015, 16:47 | #5 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Чего-то мы плохо друг друга понимаем. Видимо, узкие/широкие строки (с абстрагированием от кодировки) нужны чтобы дергать std библиотеку, ну там файл открыть и т.д. Т.е. кодировки могут меняться, а узкие/широкие символы нет. При этом в std нет способов конвертации между узкие/широкие символы и другими кодировками (может не нашёл?)
Представим, что имя файла мы читаем из файла (кодировка utf-16), как мы его конвертируем в узкие/широкие символы? |
08.03.2015, 18:46 | #6 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Попробовал создать basic_ostream для консоли, это ещё та сексуально-нетривиальная задача ))
ЗЫ: в винде, для связки буферов консоли с потоковыми буферами: Код:
Последний раз редактировалось 220Volt; 08.03.2015 в 21:23. |
08.03.2015, 22:14 | #7 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
p51x, спасибо за участие.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Текущая локаль, реестр Windows | Pcrepair | Windows | 4 | 23.01.2013 22:37 |
Локаль в Delphi XE | Stilet | Общие вопросы Delphi | 2 | 12.08.2011 14:22 |