2010-10-27 70 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