Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод\вывод Unicode в C++ 
:(
    Опции темы
bsa
Дата 8.4.2013, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



PM   Вверх
volatile
Дата 8.4.2013, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(shaukote @  8.4.2013,  01:54 Найти цитируемый пост)
А странно-полуработающий вариант Alexeis?

имеется ввиду именно мультиязычный текст. не только русский.
Юникод собственно для того и существует, чтобы выводить мультиязычный текст.
Если вам нужен только русский, то да, можете выбирать варианты.

PM MAIL   Вверх
shaukote
Дата 8.4.2013, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 13.2.2013

Репутация: нет
Всего: нет



Цитата(bsa @  8.4.2013,  11:36 Найти цитируемый пост)
Русский язык в программах 

Насколько я понял, там речь идёт несколько о другом.


Цитата(volatile @  8.4.2013,  20:17 Найти цитируемый пост)
имеется ввиду именно мультиязычный текст. не только русский.
Юникод собственно для того и существует, чтобы выводить мультиязычный текст.
Если вам нужен только русский, то да, можете выбирать варианты.

Простите, но я вообще не понял, к чему Вы это сказали.  smile 
Мне не дают покоя два вопроса:
1) Почему не работает Ваш вариант с _setmode? Хотя вроде как должен корректно работать и на ввод и на вывод.
2) Как вообще может работать вариант Alexeis?  smile 

Буду крайне признателен, если Вы сможете мне их разъяснить.
PM MAIL   Вверх
volatile
Дата 8.4.2013, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(shaukote @  8.4.2013,  21:52 Найти цитируемый пост)
Мне не дают покоя два вопроса:
1) Почему не работает Ваш вариант с _setmode? Хотя вроде как должен корректно работать и на ввод и на вывод.

Нет на ввод он действительно в этом виде не работает . (именно на ручной ввод с консоли)
объясню почему меня это устраивает: я никгда не делаю приложений с ручным вводом с консоли. Если нужен диалог с пользователем, то имхо, нужно делать GUI!
Удел консольных приложений работа с ком.строкой, перенаправленный ввод, вывод. и т.д.
Вобщем если вам нужен ручной консольный ввод, то вам это не подойдет.
Сорри что побеспокоил.

Цитата(shaukote @  8.4.2013,  21:52 Найти цитируемый пост)
) Как вообще может работать вариант Alexeis?   

Код

int main()
{
    wstring text, word;
    getline(wcin, text);
    wcout << text << endl;

    wistringstream input(text);
    while (input >> word)
        wcout << word << endl;
}


В студии этот код работает только в неконсольном приложении, и фактически выводит в кодировке cp866
перенаправьте в файл, увидите. (никакой мультиязычности т.е. нет)
В нормальном юникодном приложении этот код выдает следующее:
Код

Абвгд
€¡¢£¤
€¡¢£¤

Да, и кстати , вариант с _setmode нужно тоже проверять на настоящем юникодном приложении..  smile 


Это сообщение отредактировал(а) volatile - 8.4.2013, 23:39
PM MAIL   Вверх
shaukote
Дата 8.4.2013, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 13.2.2013

Репутация: нет
Всего: нет



Цитата(volatile @  8.4.2013,  23:38 Найти цитируемый пост)
Нет на ввод он действительно в этом виде не работает .

А Вы вроде бы говорили, что можно это как-то "обойти"?..


Цитата(volatile @  8.4.2013,  23:38 Найти цитируемый пост)
 вариант с _setmode нужно тоже проверять на настоящем юникодном приложении..

"Настоящем юникодном приложении"?.. Что Вы под этим подразумеваете? 
PM MAIL   Вверх
Alexeis
Дата 8.4.2013, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(volatile @  9.4.2013,  00:38 Найти цитируемый пост)
В студии этот код работает только в неконсольном приложении, и фактически выводит в кодировке cp866
перенаправьте в файл, увидите. (никакой мультиязычности т.е. нет)
В нормальном юникодном приложении этот код выдает следующее:

  Подтверждаю, сегодня проверял на VS2005 . Файловый ввод/вывод UTF8 заработал только через бустовские локали, а вот UTF16 никак. Единственный рабочий способ через стандартные фасеты С++11 . Делают шаблонный фасет из wchar_t в wchar_t причем там по ходу реальное преобразование, поскольку юникодные потоки выгребают файл в буфер из char, точно также как это делают не юникодные. И если для UTF8 еще оправдана сборка символов с char-в, то для wchar_t сие преобразование выглядит как бред. Возможно, местные гуру С++ найдут в этом сакральный смысл, но мое ИМХО, что нехай ifstream рассматривает файл как char-ы и учиться извлекать из него строк как string так и wstring, а вот  wifstream должен файл рассматривать как поток wchar_t и уже их транслировать во что угодно.
  
  P.S. удивительно как в билдере консолька юникодная. Вероятно, имеет место тотальная юникодизация видимо разработчики где-то удачно накосячили раз работает.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0984 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.