在我正在处理的项目中,我需要进行相当多的字符串操作;字符串与其编码(可以是单字节或双字节)一起从二进制文件中读取。基本上,我将字符串值读取为
这个方法工作得相当好,但是文件名本身可以是双字节字符。我完全不知道如何打开输入流。在C语言中,我会使用
这个问题的解决方案是什么?
编辑:在网上搜索,标准C++中似乎根本没有支持此功能(例如,请参见this discussion)。但是我想知道C++11在这个领域是否实际添加了一些有用的东西。
vector<char>
,读取编码,然后将所有字符串转换为wstring
,以保持一致性。这个方法工作得相当好,但是文件名本身可以是双字节字符。我完全不知道如何打开输入流。在C语言中,我会使用
_wfopen
函数传递wchar_t* path
,但是wifstream
似乎行为不同,因为它专门设计用于从文件中读取双字节字符,而不是从具有双字节文件名的文件中读取单字节。这个问题的解决方案是什么?
编辑:在网上搜索,标准C++中似乎根本没有支持此功能(例如,请参见this discussion)。但是我想知道C++11在这个领域是否实际添加了一些有用的东西。
wchar_t
和wstring
,因为wchar_t
在不同编译器中不具备可移植性(在 VC++ 中是 16 位,在 gcc 中是 32 位)。不过 C++11 引入了char16_t
和char32_t
,当然你也可以自己使用typedef
。 - Matthieu M.wstring
工作。我应该实现一个string
子类,比如utf8string
来包装所有的转换吗?还是有更简单的方法? - Aleks Gstd::string
,因为有很多函数可以在其中进行转换(也可以在stackoverflow上找到)。但是你应该将数据设置为const
。在我看来,一个接口良好的实现是http://utfcpp.sourceforge.net/。虽然我迄今为止还没有使用过它。 - filmor