NSString解码问题

时间:2010-10-27 05:03:54

标签: objective-c

此String是base64编码的字符串:

NSString *string=@"ë§ë ë¼ì´";

这不显示原始字符串:

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

2 个答案:

答案 0 :(得分:2)

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

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

  2. 字符¼´不属于MacRoman编码,因此您无法使用它们。您确定要使用MacRoman字符串而不是Unicode字符串吗?无论如何,没有多少应用程序使用MacRoman。

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

  4. 那就是说,你的代码将起作用:

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

    我说“有点工作”,因为再次,你无法在MacRoman中代表那些代码。

答案 1 :(得分:0)

那是因为Mac OS Roman与base-64编码完全不同。 Base-64编码是应用表示原始字符串的字节的进一步编码。如果要查看原始字符串,首先需要对字节串进行base-64解码,然后找出原始字符串编码才能解释它。