遇到的問題是:
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來接收郵件,發現中文正文無亂碼