我有一个非常标准的utf-16文本文件,混合了英文和中文字符.我希望这些字符以字符串结尾(技术上是一个wstring).我已经看到很多相关的问题得到解答(这里和其他地方),但是他们要么想要解决在不知道编码的情况下读取任意文件这么难的问题,要么在编码之间进行转换,或者只是对“Unicode”感到困惑. “是一系列编码.我知道我正在尝试阅读的文本文件的来源,它将始终是UTF16,它有一个BOM和一切,它可以保持这种方式.
我一直在使用here所描述的解决方案,该解决方案适用于所有英文文本文件,但在遇到某些字符后,它停止读取文件.我发现的唯一其他建议是使用ICU,这可能会有效,但我真的不想在应用程序中包含一个完整的大型库,只需在一个地方读取一个文本文件.我不关心系统独立性 – 我只需要它在Windows中编译和工作.当然,一个不依赖于这个事实的解决方案会更漂亮,但是对于使用stl同时依赖于关于Windows体系结构的假设,甚至涉及win32函数或ATL的解决方案的解决方案,我也会感到高兴.我只是不想要包括像ICU这样的另一个大型第三方库.除非我想自己重新实现,否则我还是完全没有运气了吗?
编辑:我坚持使用VS2008进行这个特定的项目,所以C 11代码遗憾地无济于事.
编辑2:我意识到我之前借过的code并没有像我认为的那样在非英文字符上失败.相反,它在我的测试文档中的特定字符上失败,其中包括’:'(FULLWIDTH COLON,U FF1A)和’)'(FULLWIDTH RIGHT PARENTHESIS,U FF09). bames53的发布解决方案也大部分都有效,但被这些相同的角色难住了?
编辑3(和答案!):我一直在使用的原始代码-did-主要是工作 – 正如bames53帮助我发现的那样,ifstream只需要以二进制模式打开才能工作.