码迷,mamicode.com
首页 > 其他好文 > 详细

fwrite写unicode回车遇到乱码

时间:2015-08-19 13:27:22      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:unicode   乱码   回车   

今天在用fwrite写unicode文件的时候出现了一个问题,代码如下

 _wfopen_s(&fp,L"out.txt",L"w+");

    if (fp)
    {

        //写入unicode文件头
        const char*utf16head = "\xFF\xFE";
        fwrite( utf16head, 2, 1,fp);
        //fwrite(line.c_str(), 2, line.size(),fp);
        fwrite(L"dsad\n", 2, 5,fp);
        fclose(fp);

    }

技术分享
发现”\n”写成了0x0d 0x0a 0x00 多了一个0x0d,造成文本解析错误,形成乱码。经过检查原来是文件打开方式的问题。w是以文本方式打开文件,wb是二进制方式打开文件。
以文本方式打开文件时,fwrite函数每碰到一个0x0A时,就在它的前面加入0x0D。这是因为为了与linux兼容, 本来换行原来就是0A(‘\n’), 微软把\n 改为了\r\n,即从0A改为0D 0A。
总结,当你以w方式打开时,向文件写入\n,其实是底层API帮你多写了一个\r。因此写入\r\n,比如fwrite(L”dsad\r\n”, 2, 6,fp)其实是写入了dsad\r\r\n。
而wb以二进制写入,没有添加内容的操作。因此把打开方式改为”wb+”就OK。代码如下

 _wfopen_s(&fp,L"out.txt",L"wb+");

    if (fp)
    {

        //写入unicode文件头
        const char*utf16head = "\xFF\xFE";
        fwrite( utf16head, 2, 1,fp);
        //fwrite(line.c_str(), 2, line.size(),fp);
        fwrite(L"dsad\n", 2, 5,fp);
        fclose(fp);

    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

fwrite写unicode回车遇到乱码

标签:unicode   乱码   回车   

原文地址:http://blog.csdn.net/lampqiu/article/details/47778507

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!