Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Enno
266 / 169 / 38
Регистрация: 25.08.2014
Сообщений: 1,088
Записей в блоге: 1
#1

Как с помощью getline считать двухбайтовые символы? - C++

30.01.2015, 10:56. Просмотров 478. Ответов 3
Метки нет (Все метки)

В общем надо считать строку из файла. Если однобайтовая - всё ок. Как только wchar_t - начинается дурдом. getline в упор не видит какой параметр ему передают и забивает каждый байт в каждый символ строки. Т.е. для строки типа wstring строка в файле "666" которая в hex выглядит как "360036003600" вводится как "003600000036000000360000". Из-за таких особенностей я не могу работать с wide-символами. Кто знает как победить это дело? Может какой-нибудь wgetline есть?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2015, 10:56     Как с помощью getline считать двухбайтовые символы?
Посмотрите здесь:

C++ Считать символы из файла в массив
C++ Builder Считать символы из строки между разделителями
С помощью cin.getline считать все строки файла в контейнер (вектор или очередь) C++
Считать строку getline и вывести ее в ListBox C++ WinAPI
Функция getline(). Как исключить знаки препинания (символы)? C++
Считать символы из вектора в массив чаров C++
getline() (не получается считать информацию с файла) C++
C++ Считать русские и английские символы с консоли
Задана строка, символы которой могут повторяться. Нужно удалить все символы строки с помощью наименьшего количества вычеркиваний C++
Как считать из файла символы и цифры одновременно? Структуры C++
Как поэлементно считать текст с файла с помощью fstream, и сохранить каждый символ в массив? C++
Как узнать, был ли найден в строке, читаемой с помощью функции std::getline(), символ \n ? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6859 / 4070 / 927
Регистрация: 30.01.2014
Сообщений: 6,867
31.01.2015, 13:46     Как с помощью getline считать двухбайтовые символы? #2
Enno, Посмотри тут, код под вторым спойлером в посте. Нужно будет убрать из начала примера (main) вот эти строки
C++
1
2
3
4
    typedef basic_streambuf_win32<wchar_t> wstreambuf_win32;
 
    wstreambuf_win32 wb;
    std::wcout.rdbuf(&wb);
Enno
266 / 169 / 38
Регистрация: 25.08.2014
Сообщений: 1,088
Записей в блоге: 1
31.01.2015, 14:18  [ТС]     Как с помощью getline считать двухбайтовые символы? #3
Ну да, теперь взлетело. А в чём фишка? В том что с помощью imbue locale поменяли на какую-то хитрую? Я не шарю просто. Хотя вот в MinGW всё работает, считывается нормально без таких "преобразования".
DrOffset
6859 / 4070 / 927
Регистрация: 30.01.2014
Сообщений: 6,867
31.01.2015, 14:25     Как с помощью getline считать двухбайтовые символы? #4
Цитата Сообщение от Enno Посмотреть сообщение
А в чём фишка?
В том, что локаль по-умолчанию пытается преобразовывать к char.
Этим кодом, мы наоборот отключили какое-либо преобразование. Этот класс - заглушка. Позволяет на выходе получить ровно то, что пришло из файла.
В MinGW, видимо, преобразование и так не делается.
Yandex
Объявления
31.01.2015, 14:25     Как с помощью getline считать двухбайтовые символы?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru