BASE 64復号の中国語文字化けし問題

2305 ワード

RFC 2045には、The encoded output stream must be represented in lines of no more than 76 characters each.Base 64の行は76文字を超えてはいけません.超えたら折り返し改行を追加します.
base 64で符号化されたデータは、76文字おきに、戻り改行記号「r」、「r」、「」が1バイトずつ占められている.したがって、データを復号する前に、データ中の折り返し改行を削除すると、折り返し改行による文字化けし問題を解決することができる.
折り返し改行要因による文字化けしの決定:
取得したデータを16進数に変換して印刷する、リターン改行文字'r'''''ASCIIコードテーブルに対応する16進数0 x 0 D 0 x 0 Aがあるかどうかを確認することができる.
以下は、リターン改行文字C++コードを削除します.
 string s = "yangdiao\r
yangdiaoyangdiao"
; int pszLen = s.length(); char *a = new char[pszLen+1]; memcpy(a, s.c_str(), pszLen); for (int i = 0; iif (a[i] == 0x0D || a[i] == 0x0A) { for (int j = i; jif (j + 1 < pszLen) a[j] = a[j + 1]; } pszLen = pszLen - 1; if (i>1) i = i - 1; } } char *b = new char[pszLen+1]; memcpy(b, a, pszLen); b[pszLen] = 0x00; printf(" : %s
"
,b); delete a; delete b;

参照先:
http://blog.csdn.net/jifengwan/article/details/45460695 http://www.cnblogs.com/lijiale/p/5434050.html http://blog.sina.com.cn/s/blog_4eb5ae750101cq16.html