使用C+解决Linux中文乱码问题


遇到的问题是:
1.在Linux下用fstream读取内容为中文的文件,存放在string类中
2.在string字符串中,对其进行查找,插入,替换,追加等操作
3.把处理好的string字符串,使用smtp协议来发送邮件
4.windows机器使用outlook来接收邮件,发现正文内容有几处乱码

继续对string类做个测试:
string text;
for(int i = 0 ; i < 1000; i++)
{
        text.append("我");
}
sendMail(text);

windows机器用outlook接收的邮件如下:
鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜
鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜鎴戞垜

可见中间突然换行了。可能是linux下的string与linux的编码处理不够兼容(或者是windows换行是\r\n,linux是\n)。执行string.append()时,string类发现空间不够用,就会向操作系统请求更大的内存,复制内容到新内存,释放原有内存,在这个过程中导致了乱码。

解决方法:
1.在windows下使用记事本编辑文件内容,保存为utf-8编码格式
2.使用samba共享把文件传到Linux机器上
3.在linux使用C读入文件内容到缓存中char*
4.在char*的缓存中,对其进行查找,插入,替换,追加等操作
5.把处理好的char*缓存,转换成string类(string context(char*))使用smtp协议来发送邮件(sendMail(context))
6.windows机器使用outlook来接收邮件,发现中文正文无乱码

相关内容