0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 3
|
|||||||||||
1 | |||||||||||
Сохранение кодировки при чтении XML-файла12.01.2016, 13:39. Показов 1121. Ответов 6
Метки нет (Все метки)
Всем привет Прошу знающих людей помочь советом, или просто пальцем ткнуть в литературу, только пожалуйста, поподробнее, а то я совсем тапочек.
Итак, ос windows, IDE visual studio 2015, язык VC++. Задача: на входе UTF-16 xml файл, его надо прочитать, распарсить, и записать полученный результат в csv с сохранением кодировки. Погуглив и походив по граблям выбрал единственное понятное для себя решение: открывать файлы wofstream и wifstream, забирать символы в wchar_t и по мере поступления распарсивать символы в отдельные лексемы, а для текстовых строк объединять символы конкатенацией в wstring с одновременной записью их в выходной файл (wstring понадобится для реализации логики парсера). Изначально хотелось сделать структуру строк, чтобы потом обрабатывать данные по-разному в зависимости от нужд, но не смог адекватно вывести wstring строки в output файл. Для теста используем xml-ку в одну тестовую строку, такую: <record type="Sudden.Test_xml_parser__code_243435&">비회} 개전</record> Итак, первый тест:
Однако при добавлении еще одной инструкции read корейские иероглифы ломаются(внимание на строку №7):
Итак, очень хотелось бы понять: а) почему так происходит? б) как это обойти, хотя бы костылем? в) как реализовать чтение/запись правильно? Где-то на этих форумах читал, что читать unicode файлы стандартными потоковыми классами чуть ли не моветон.
0
|
12.01.2016, 13:39 | |
Ответы с готовыми решениями:
6
"Нарушение прав доступа при чтении по адресу" при чтении структур из бинарного файла Смена кодировки XML файла Сохранение Xml файла Ошибка при вызове метода класса, при чтении из файла |
Ушел с форума
|
|
12.01.2016, 14:13 | 2 |
Начнем с того, что тестовая строка не соответствует правилам XML, так
как амперсанд (&) - специальный символ, выполняющий экранирование.
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
12.01.2016, 14:37 | 3 | |||||
wifstream - юникодовый файловый поток.
что это значит? это значит, что внутри себя он хранит данные в виде wchar_t и не боле того. он понятия не имеет, что означают все эти wchar_t-циферки. за корректную интерпритацию отвечают вспомогательные механизмы. одним из которых является так называемая "локаль". http://www.cplusplus.com/refer... ios/imbue/ не знаю насчет коррекйских буковок, но для корректной обработки русских достаточно поставить себе системную локаль (соотвествует локали операционки)
0
|
0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 3
|
|
12.01.2016, 17:06 [ТС] | 4 |
Добавлено через 2 часа 7 минут Разобрался, вторая инструкция ела BOM символ, в итоге полученный файл декодировался неверно. Спасибо всем откликнувшимся.
0
|
Ушел с форума
|
||||||
12.01.2016, 18:14 | 5 | |||||
Насколько я знаю, wofstream не работает с UTF-16, хотя это и wide stream.
Например:
но только не UTF-16.
0
|
0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 3
|
|
12.01.2016, 18:59 [ТС] | 6 |
0
|
Ушел с форума
|
|
12.01.2016, 19:58 | 7 |
Попробуй вместо "Hello" написать что-нибудь с иероглифами, кириллицей и т.п.
0
|
12.01.2016, 19:58 | |
12.01.2016, 19:58 | |
Помогаю со студенческими работами здесь
7
фейл при чтении из файла Ошибка при чтении из файла Проверка при чтении из файла Expression при чтении из файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |