在Linux下使用C++发送中文邮件,而用outlook接收是乱码
2011-07-05 20:33
525 查看
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来接收邮件,发现中文正文无乱码
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来接收邮件,发现中文正文无乱码
相关文章推荐
- 使用python发送邮件,无中文乱码。
- java如何发送邮件以及使用Velocity模板解决模板文件中文乱码的问题
- 安卓使用Socket发送中文,C语言服务端接收乱码问题解决方案
- 安卓使用Socket发送中文,C语言服务端接收乱码问题解决方式
- php 使用phpmailer 发送邮件(附带中文乱码的解决方法)
- Java 使用 Velocity 发送邮件中文内容乱码问题的解决办法
- php程序使用mail()函数发送邮件的时候,标题中文的话会出现乱码
- 使用Outlook发送邮件至移动设备导致移动设备接收winmail.dat问题解决方法
- Linux利用Esmtp 选择邮件服务器发送邮件(解决手机接收乱码) 推荐
- Java使用Velocity模板发送HTML格式邮件并解决中文乱码问题
- 使用Formail发送html格式的中文主题邮件,解决乱码问题等
- Linux下Shell发送附件邮件&中文乱码
- c/c++ curl smtp 发送邮件 foxmail 中文乱码问题解决
- C++使用curl库发送https请求中文乱码问题
- .net发送邮件outlook中文乱码
- Linux中使用crontab发送邮件,电子邮件文本转到一个名为ATT00001.bin的附件文件的解决方案
- springMVC_json格式数据的接收和发送(未解决中文乱码问题)
- 在jsp页面传递参数时,后台接收出错,中文乱码,可以使用两次转码后再传给后台
- [.NET]解决使用JMail接收邮件时的标题乱码