我有一个使用 Microsoft 报告工具创建的文本文件。文本文件BOM
0xFFFE
在开头包含 ,然后ASCII
在字符之间包含空值(即“ F.i.e.l.d.1.
”)的字符输出。我可以iconv
用来将其转换为UTF-8
用作UCS-2LE
输入格式和UTF-8
输出格式……效果很好。
我的问题是我想将文件中的行读UCS-2LE
入字符串并解析出字段值,然后将它们写入ASCII
文本文件(即Field1 Field2
)。我已经尝试过基于string
和-wstring
的版本getline
——当它从文件中读取字符串时,类似的函数substr(start, length)
会将字符串解释为8-bit
值,因此起始值和长度值是关闭的。
如何将UCS-2LE
数据读入C++
字符串并提取数据值?我查看了boost
以及icu
无数的谷歌搜索,但没有找到任何有效的东西。我在这里想念什么?请帮忙!
我的示例代码如下所示:
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
(或其他)从文件中读取这些字符串并将它们转换为固定宽度表示以供内部使用的示例?
顺便说一句,我在使用 Eclipse 和 gcc 的 Mac 上。我可能STL
不理解宽字符串吗?
谢谢!