1

私は MIME ヘッダーを持っています:

Subject: =?ISO-2022-JP?B?GyRCJzEnYidWJ1UnWSdRJ1wnURsoQg==?=
=?ISO-2022-JP?B?GyRCJ1kbKEIgGyRCLWIbKEIxNzUzNTk=?=
=?ISO-2022-JP?B?IBskQidjGyhCIBskQidjJ1EnWydkJ1EbKEI=?=
=?ISO-2022-JP?B?IBskQidXGyhCLRskQideJ2AnUidaJ10nbhsoQg==?=

最初の文字列をデコードしようとするGyRCJzEnYidWJ1UnWSdRJ1wnURsoQg==と (base64 デコードしてからNSSring initWithData: encoding:)、問題ありません。私のコードは、以下を除いて何百もの異なる MIME ヘッダーに対して正常に動作します...

...2 番目の sring をデコードしようとするとGyRCJ1kbKEIgGyRCLWIbKEIxNzUzNTk=NSString initWithData:encoding:戻りますnil

たとえば、 http: //2cyr.com/decode/ ?lang=en はすべての文字列を正しくデコードします (このサイトを使用する前に、この文字列を base64 からエンコードすることを忘れないでください)。

4

2 に答える 2

2

これは base64 の問題ではなく、ISO-2022-JP の問題です。実はJIS-X-0208の問題です。base64 でデコードされた (ISO-2022-JP でエンコードされたままの) 文字列を見ると、シーケンスESC $ B - b(バイト 9 から 13) が含まれていることがわかります。最初の 3 つは JIS-X-0208-1983 にシフトするための ISO-2022-JP シフト シーケンス (詳細についてはRFC 1468を参照) であり、次の 2 つは文字の 2 バイト エンコーディングであると想定されていますが、定義されていないkutenグリッドの 13 行目にあります。

tl;dr: 有効な文字ではありません。

于 2012-06-03T21:02:50.233 に答える
0

=ひょっとしたら、あなたのストリングにファイナルが欠けているのではありませんか?

于 2012-06-03T10:13:58.967 に答える