У меня есть текстовый файл, созданный с помощью какого-либо инструмента отчетности 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
не понимает строки широких символов?
Спасибо!