У меня есть текстовый файл, который был создан с помощью некоторого инструмента отчетности Microsoft. Текстовый файл включает в себя BOM
0xFFFE
в начале, а затем вывод ASCII
символов с нулями между символами (т.е. "F.i.e.l.d.1.
"). Я могу использовать iconv
, чтобы преобразовать это в UTF-8
, используя UCS-2LE
в качестве формата ввода и UTF-8
в качестве формата вывода... это прекрасно работает.
Моя проблема в том, что я хочу читать строки из файла UCS-2LE
в строки и анализировать значения полей, а затем записывать их в текстовый файл ASCII
(т.е. Field1 Field2
). Я пробовал версии getline
на основе string
и wstring
— пока он считывает строку из файла, такие функции, как substr(start, length)
, интерпретируют строку как значения 8-bit
, поэтому значения начала и длины отключены.
Как прочитать данные UCS-2LE
в строку C++
и извлечь значения данных? Я просмотрел boost
и icu
, а также многочисленные запросы в Google, но не нашел ничего подходящего. Что мне здесь не хватает? Пожалуйста помоги!
Мой примерный код выглядит так:
wifstream srcFile;
srcFile.open(argv[1], ios_base::in | ios_base::binary);
..
..
wstring srcBuf;
..
..
while( getline(srcFile, srcBuf) )
{
wstring field1;
field1 = srcBuf.substr(12, 12);
...
...
}
Итак, если, например, srcBuf
содержит "W.e. t.h.i.n.k. i.n. g.e.n.e.r.a.l.i.t.i.e.s.
", то substr()
выше возвращает ".k. i.n. g.e
" вместо "g.e.n.e.r.a.l.i.t.i.e.s.
".
Я хочу прочитать строку и обработать ее, не беспокоясь о многобайтовом представлении. Есть ли у кого-нибудь пример использования boost
(или чего-то еще) для чтения этих строк из файла и преобразования их в представление с фиксированной шириной для внутреннего использования?
Кстати, я на Mac использую Eclipse и gcc. Возможно ли, что мой STL
не понимает строки с широкими символами?
Спасибо!