Cocoa base64解码。和NSString initWithData:encoding:return nil

时间:2012-06-03 09:38:19

标签: objective-c cocoa encoding base64 mime-types

我有MIME标题:

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

当我尝试解码第一个字符串GyRCJzEnYidWJ1UnWSdRJ1wnURsoQg==(base64 decode然后NSSring initWithData: encoding:)时,可以。我的代码适用于数百个不同的MIME标头,除了......

...当我尝试解码第二个GyRCJ1kbKEIgGyRCLWIbKEIxNzUzNTk=时,NSString initWithData:encoding:返回nil

例如,http://2cyr.com/decode/?lang=en正确解码所有字符串(不要忘记使用此网站从base64编码此字符串)。

2 个答案:

答案 0 :(得分:2)

这不是base64问题,而是ISO-2022-JP问题。实际上这是一个JIS-X-0208问题。如果您查看base64解码(但仍然是ISO-2022-JP编码)字符串,您将看到它包含序列ESC $ B - b(字节9到13)。前三个是转换到JIS-X-0208-1983的ISO-2022-JP换档序列(详见RFC 1468),接下来的两个应该是字符的2字节编码,但是如果你work it out它位于 kuten 网格的第13行,它未定义。

tl; dr:那不是一个有效的角色。

答案 1 :(得分:0)

也许你错过了字符串中的最终=