文件读写字符乱码的解决方案
来源:互联网 发布:专业java培训 编辑:程序博客网 时间:2024/06/16 14:38
关于字符乱码,可能很多人在实际的开发过程中都会遇到。要解决它,既是一个简单的问题,又是一个复杂的问题。
简单是因为只要编码方式选对就可以从容的解决它,复杂也是复杂在编码方式的选择这里。
对于ANSI编码的文件,只需要按照常规的读写方法就行,而对于UNICODE编码的文件,需要用宽字符串来接受读取的内容,或者通过常规字符串读取后通过API 函数MultiByteToWideChar()把常规字符串转换成宽字符串即可。
但是对于UTF-8编码的文件,却不是这么容易处理了,很容易出现乱码。
解决放案:
以二进制方式或文本方式打开文件,读文件的时候要用常规字符串来接受返回的文件流,然后再通过函数:MultiByteToWideChar()把UTF-8编码的字符串流转换成宽字符的形式,这样子才不会乱码。如果一开始就用宽字符的字符串流读取,那么就会出现乱码,利用函数:WideCharToMulitiByte()转换后依然是乱码。
如果读写的对象是宽字符,还要进行本地语言的设置,比较麻烦,需要在不同的语言之间不停地转来转去。所以最后就是同意转换成常规字符串的形式,牺牲点效率换来编程上面的便利。
贴上代码:
#include <iostream>#include <fstream>#include <string>#include <Windows.h>using namespace std;int main(){//locale(CP_ALL,"");string str;wstring wstr;char *p ;wchar_t *wp;int length;//文件类型为:UTF-8。ifstream inFile("utfFile.txt");//ifstream inFileT("utfFile.txt", ios::binary );if(inFile.fail())cout<<"file open error,multi"<<endl;p = new char[1024 +1];memset( p, 0, 1025 );//文件读取。文本inFile.read( p, 1024 );//编码转换: 转换成宽字符length = MultiByteToWideChar( CP_UTF8, 0, p, 1024, NULL, 0 );wp = new wchar_t[length];memset(wp, 0, length );MultiByteToWideChar( CP_UTF8, 0, p, 1024, wp, length ); //转换回常规字符:length = WideCharToMultiByte( CP_ACP, 0, wp, -1, NULL, 0, NULL, NULL ); delete[] p; p = new char[length];length = WideCharToMultiByte( CP_ACP, 0, wp, -1, p, length, NULL, NULL );//写入文件:ofstream outFileB( "outFile_binary.txt", ios::binary );ofstream outFileT( "outFile_text.txt" );outFileB.write( p, length );outFileT.write( p, length ); delete[] p; delete[] wp; //控制台输出:system("pause");}
- 文件读写字符乱码的解决方案
- 读写文件编码方式不一致导致文件乱码的解决方案
- 软件读写中文字符的文件出现乱码的解决办法
- C# System.IO下读写文件乱码的解决方案
- 对于宽字符文件的读写乱码方法处理
- 【java】:对属性文件的读写操作,中文字符解决方案
- jdbc操作非中文字符集oracle数据库导致的中文字符读写乱码的解决方案
- 字符乱码问题的解决方案
- 对于firefox开发中读写文件中文字符乱码的解决
- Unity3D脚本中文字符乱码的解决方案
- Unity3D脚本中文字符乱码的解决方案
- Unity3D脚本中文字符乱码的解决方案
- chm文件乱码的解决方案
- mysql字符乱码解决方案
- 文件下载字符乱码完整解决方案【servlet+Tomcat】
- java读写文件的中文乱码问题
- xml文件读写乱码的问题
- 文件的基本操作-字符的读写
- MyEclipse的 at com.genuitec.eclipse.ast.deploy.core.Deployment.<init>错误解决办法。
- 浅谈:JavaScript中分号的省略规则
- Android apk多渠道验证工具 - 不提供工具,只提供源码
- winform Combox绑定数据并根据value值选中项
- HDU 2276 Kiki & Little Kiki 2 矩阵快速幂
- 文件读写字符乱码的解决方案
- ORMLite使用教程
- 二叉搜索树的详解(算法导论读书笔记)
- 磁盘管理——RAID 5
- [Oracle] 分区探索(1) - 分区剪枝
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
- android图片延迟加载,照片墙,listview中图片的延迟加载(国外制造)
- 创建高性能移动 web 站点
- eclipse工具使用