读书人

C++ wftream该怎么使用

发布时间: 2012-03-08 13:30:13 作者: rapoo

C++ wftream该如何使用?
用C++写的DLL,第一想法就是用fstream而不是fopen,由于我的DLL内部参数传递的时候,所有一切都是使用Unicode编码,所以自然使用的是使用wfstream了。
读文件正常,但是,下面发生的一切就开始很诡异了:
当我使用get从文件中读取内容到一个wchar_t数组后,发现……
英文是对的,因为Unicode的英文是ASCII前面加00
中文错了,比如“中”0x4e2d,变成了0x004e 0x002d……

希望大家能帮帮我,谢谢……

[解决办法]
wget()
[解决办法]
wfstream wfs;
wfs.open(L "UTF16.bin ");
setlocale(LC_ALL, "chinese ");
.............
[解决办法]
mark

[解决办法]
mark
[解决办法]

以前的研究结果(vc) :
1. c++所有的io类都不支持unicode读写操作,包括w开始的
2. w开始的实际上不是读写unicode,而是将内码转化为unicode内部表示.也就是外部接口支持的是内码,但是内部表示是unicode,中间的转换就是他们和非w开始的差别
3. 如果要自己写读写unicode, 那么个人觉得比较容易的方法,就是用不转化的非w开始来读取数据,然后转化为wchar_t数组,因为本身就是unicode,所以这个只是将两个char直接合并成一个wchar_t,相当简便(如果是utf-8编码,也不会很复杂)
4. txt文本有个前导标志 : ff fe 之类的,应该跳过


[解决办法]
mark
[解决办法]
要设置这个
setlocale(LC_ALL, " ");
文件打开也要_wopen 最好用宏_wfopen_s
字符读用getwc
应该可以了
[解决办法]
关于这部分,可以参考C++标准文档,msdn和google的结果大多不准确或者语焉不详.结合stl的源代码来分析.
关于locale的内容其实相当多和复杂,但是专门的书很少.据说有一本专门讲述这一内容书,可是我没看过.

读书人网 >C++

热点推荐