wfstream是不是有问题

cherima006 2013-09-10 05:11:42
a.txt中有中文和英文,wfstream读出来,始终一个字节一个字节读,转成wchar,无论txt是unicode还是ansi都不对,乱码。
而用fstream读unicode肯定不行,不过读ansi编码的是可以的。

这样看来wfstream有什么用呢??????不识别外部文件编码,还画蛇添足加“00”,改成ios::binary也没有用。
...全文
278 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-06-24
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
cherima006 2014-06-24
  • 打赏
  • 举报
回复
文字编码果然是个坑
lm_whales 2013-09-20
  • 打赏
  • 举报
回复
wfstream ==除了locale,要求 文件名文件内容都是 UNICODE,大约是这样的。 UINCODE的标记是FFFE 或者FEFF ; 每个UNICODE 文件文本文件,开始都有这么两个字节。 VC 高版本的 自动生成的代码中好像就有这个标记。
申祷无 2013-09-19
  • 打赏
  • 举报
回复
另外locale这个库属于航空母舰那种级别的东西,对于大型工程可能有提高开发效率的作用,对于小的应用来说可能不是很合适,并且学习这个库好像也不是很容易。如果只是转换编码的话不如直接到github上搜搜有没有现成的库。
申祷无 2013-09-19
  • 打赏
  • 举报
回复
引用 5 楼 cherima006 的回复:
[quote=引用 2 楼 shendaowu 的回复:] 欢迎入编码转换这个大坑。 好像要对文件流调用imbue函数,还要创建一些对象。 http://www.cplusplus.com/reference/codecvt/codecvt_utf8/ 相关的库还有locale,这个库实在是太复杂了。codecvt库是个专门用于编码转换utf的好像是从locale派生出来的类。可以百度谷歌一下codecvt_utf8。 之前搞了好几个小时只取得了一点点的成果,直接放弃了。
多谢,有空的话会拜读这本书的[/quote]我技术很渣,我搞了好几个小时只取得了一点点的成果不代表你不能搞懂很多,如果你的技术很强的话应该可以搞懂很多。
赵4老师 2013-09-11
  • 打赏
  • 举报
回复
引用 7 楼 ananluowei 的回复:
不是只有ANSI一种格式的文本文件。 碰到UNICODE编码的文件怎么办。
比如1楼里面的文件。
大尾巴猫 2013-09-10
  • 打赏
  • 举报
回复
不是只有ANSI一种格式的文本文件。 碰到UNICODE编码的文件怎么办。
sumos 2013-09-10
  • 打赏
  • 举报
回复
wfstream确实不行。不过可以使用c的那一套(推荐) _wfopen_s
cherima006 2013-09-10
  • 打赏
  • 举报
回复
引用 2 楼 shendaowu 的回复:
欢迎入编码转换这个大坑。 好像要对文件流调用imbue函数,还要创建一些对象。 http://www.cplusplus.com/reference/codecvt/codecvt_utf8/ 相关的库还有locale,这个库实在是太复杂了。codecvt库是个专门用于编码转换utf的好像是从locale派生出来的类。可以百度谷歌一下codecvt_utf8。 之前搞了好几个小时只取得了一点点的成果,直接放弃了。
多谢,有空的话会拜读这本书的
cherima006 2013-09-10
  • 打赏
  • 举报
回复
引用 楼主 cherima006 的回复:
a.txt中有中文和英文,wfstream读出来,始终一个字节一个字节读,转成wchar,无论txt是unicode还是ansi都不对,乱码。 而用fstream读unicode肯定不行,不过读ansi编码的是可以的。 这样看来wfstream有什么用呢??????不识别外部文件编码,还画蛇添足加“00”,改成ios::binary也没有用。
都试过的,ansi、unicode互相转了n次,结论是wfstream不行啊,fstream读ansi是可以的。
申祷无 2013-09-10
  • 打赏
  • 举报
回复
有一本书是专门讲输入输出和locale的:《The C++ IO Streams and Locales》。估计解决这个问题是绰绰有余的,但是这书600多页。
申祷无 2013-09-10
  • 打赏
  • 举报
回复
欢迎入编码转换这个大坑。 好像要对文件流调用imbue函数,还要创建一些对象。 http://www.cplusplus.com/reference/codecvt/codecvt_utf8/ 相关的库还有locale,这个库实在是太复杂了。codecvt库是个专门用于编码转换utf的好像是从locale派生出来的类。可以百度谷歌一下codecvt_utf8。 之前搞了好几个小时只取得了一点点的成果,直接放弃了。
赵4老师 2013-09-10
  • 打赏
  • 举报
回复
用记事本随便打开一个.txt文件,另存为u.txt,编码选unicode。 再试试用wfstream打开u.txt

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧