带签名指文件头包含编码信息。
EF BB BF,这三个字节代码这个文件时UTF8编码。
FF FE:代表这是 UTF16 LE(小字节序)编码 。
FE FF : 代表是 UTF16 BE(大字节序)。
详细的资料可以去查询UNICODE编码规范。
wofstream wofile("file")wofile.imbue(locale( "", locale::all ^ locale::numeric))
“”表示表示使用本地语言,这里当然相当于“chs”或者“chinese”。
locale::all表示使用该语言的所有格式设置进行编码转换!
^是异或,locale::numeric表示数字格式。这里的意思是避免转换数字格式!否则123456输出结果会成为123,456这种形式!
1)std::ofstream 支持中文的文件名,可以正常的写入中文(MBCS编码)==>std::string类型
(2)std::wofstream 支持中文的文件名,可以正常的写入中文常量(不带L),如果是带上L的话,需要将Locale设置成"chs"模式,对应std::wstring类型的变量(包含中文)写入文件时,一定要将Locale设置成"chs"模式,否则不能正常写入。
(3)宽字符的流(前面带w的)==>支持按照MBCS写文件,但是仅仅局限于常量比如std::wcout<<"wcout测试"对于MBCS的变量(std::string)来说将会产生编译错误,例:std::string str = "中文"std::wcout<<str
(4)对于宽字符的流如果是指明使用Unicode的话(std::wstring),就需要相应的设置区域了,调用相应的imbue方法
(5)总结一般的读写文件使用std::ofstream就行了,支持汉语,==>包括文件名,和文件写入
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)