【发布时间】:2010-11-17 23:49:00
【问题描述】:
我有一个使用 Microsoft 报告工具创建的文本文件。文本文件在开头包含BOM0xFFFE,然后是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 可能不理解宽字符串吗?
谢谢!
【问题讨论】: