2010-10-27 46 views
0

此字符串是base64编码字符串:NSString的解码问题

NSString *[email protected]"ë§ë ë¼ì´"; 

这是不显示原单串:

NSLog(@"String is %@",[string cStringUsingEncoding:NSMacOSRomanStringEncoding]); 
+0

'''''''''* * *不是* Base64编码。 – 2010-10-27 16:35:40

回答

0

这是因为的Mac OS罗马没有像base64编码。 Base-64编码是应用表示原始字符串的字节的进一步编码。如果你想看到原始字符串,你首先需要base-64解码bytestring,然后找出原始字符串编码来解释它。

2

这不是Base64编码的字符串。还有一些其他事情与您的代码一起进行:

  1. 您不能在字符串常量中包含文字非ASCII字符;相反,您必须使用组成字符的字节,前缀为\x;或者在Unicode的情况下,您可以使用Unicode代码点,前缀为\u。所以你的字符串应该看起来像NSString *string = @"\x91\xa4\x91 \x91\x93";。但是...

  2. 字符¼´不是MacRoman编码的一部分,因此您在使用它们时会遇到问题。你确定你想要一个MacRoman字符串,而不是一个Unicode字符串吗?无论如何,没有多少应用程序使用MacRoman。

  3. cStringUsingEncoding:返回一个C字符串,应印有%s,不%@,因为它不是一个Objective-C的对象。

这就是说,你的代码将整理工作具有:

// Using MacRoman encoding in string constant 
NSString *s = @"\x91\xa4\x91 \x91\x93"; 
NSLog(@"%s", [s cStringUsingEncoding:NSMacOSRomanStringEncoding]); 

我说“之类的工作”,因为,同样,你不能代表的MacRoman代码。

+0

+1,除了#1点错误。你可以在一个常量'NSString'中包含非ASCII字符 – 2010-10-27 17:50:15