C 读取文件中文乱码,怎么解决(记事本 Notepad++打开都正常 )
目测读文件都出来的是ascii 码ascii,汉字被转换成,具体是什么情况不知道 求解答
写文件:
ofstream fout("saveHTMLfile.html",ios::app|ios::in); //追加方式若文件不存在则创建
memset(text,'\0',sizeof(text));
while ( recv(sockfd, text, BUFSIZ, 0) > 0) //接受请求信息返回的数据
{
fout< cout //strnset(text, '\0', BUFSIZ);
strnset(text, '\0', ilen = strlen(text)+1);
}
读文件:
while(fread(cBuf,BUFSIZ,1,fp)>0){
}
增加
#include
setlocale(LC_ALL, "chs");
编码变成其他的也不是汉字
while(fread(cBuf,BUFSIZ,1,fp)>0){
}
乱码数据
span 鏈烘瀯璁剧疆
这个假设你的文件是gb编码,乱码是中文,那么
#include <locale.h>
加上
setlocale( LC_ALL, "chs" );
如果是别的编码,用记事本打开,然后另存,编码下拉选择gb2312
怎么编码的就怎么解码
先分析为什么乱码 然后在解决
中文乱码 然后在解决
你读取的文件不是乱码,而是读出来的书籍时候乱码的,是吧?
如果是读出来的数据乱码只有一种情况就是读取的字节数不对,中文有两字节组成的,当你读取的字节数刚好是读取半个中文字符的时候,就会产生乱码
你的数据是utf-8的。对应的内容是"机构设置"和"机构职能".
在程序中,读取后使用转码函数进行转码就可以了。一般在Windows下,转到gb2312/gbk就能能正常显示.
在linux,可以使用iconv函数来进行码制的转换,在windows下,可以使用WideCharToMultiByte/MultiByteToWideChar来进行相互转换.具体函数请查找对应的文档
一般在windows上的txt文本文件要么以ANSI编码要么以Unicode编码,而用C ,C++,MFC编写的程序一般人只会处理一种编码格式的文本,因为不懂怎么判断读取的文件是以哪种编码格式存储的。那么重点就是判断读取的文件是以哪种方式存储的!有两种方式解决。
一.用二进制方式打开文件,前两个字节为FFFE就是Unicode文件,ANSI则无格式定义.
如图:
这是以16进制打开Unicode文件,很明显看到前两个字节是FFFE
乱码肯定是加密和解密时使用不同的字符集导致的
写、读的编码方式要一样,IO.ReadAllText(FilePath,[Format])。
http 请求返回字符集写入文件编码系统不能识别需要进行字符集转码;读出文件才能识别中文。
解决的办法就是让服务端返回的结果的编码与客户端的编码保持一致
最直接有效的方法是在request的header中增加一个项
Accept:application/json;charset=UTF-8
/*****************************
字符转换 ANSI 转UTF-8
*****************************/
long ANSItoUTF8(CString bufRecv, char* utf8_buf)
{
long unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0, bufRecv, -1, NULL, 0);
wchar_t *pUnicode = new wchar_t[unicodeLen + 1];
memset(pUnicode, 0, unicodeLen * sizeof(wchar_t));
::MultiByteToWideChar(CP_UTF8, 0, bufRecv, -1, (LPWSTR)pUnicode, unicodeLen);
wstring rt_utf8 = pUnicode;
delete pUnicode;
long utf8length = rt_utf8.length();
CString str(rt_utf8.c_str());
memset(utf8_buf, 0, sizeof(utf8_buf));
strcat(utf8_buf, (LPSTR)(LPCTSTR)(str));
return rt_utf8.length();
}