2010-10-27 6 views
0

Cette chaîne est une chaîne codée base64:NSString Décodage Problème

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

C'est pas montrer la chaîne orginal:

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

'" ë§ë ë¼ì' "' n'est pas * codé en Base64. –

Répondre

0

Ce serait parce que Mac OS romain est rien comme l'encodage base64. Le codage Base-64 est un codage supplémentaire appliqué aux octets qui représentent la chaîne d'origine. Si vous voulez voir la chaîne d'origine, vous devrez d'abord décoder le bytestring en base 64, puis déterminer l'encodage original de la chaîne afin de l'interpréter.

2

Ce n'est pas une chaîne codée en Base64. Il y a quelques autres choses qui se passent avec votre code aussi:

  1. Vous ne pouvez pas inclure littérales caractères non-ASCII à l'intérieur d'une constante chaîne; vous devez plutôt utiliser les octets qui composent le caractère, préfixés par \x; ou dans le cas d'Unicode, vous pouvez utiliser le point de code Unicode, préfixé par \u. Donc, votre chaîne devrait ressembler à NSString *string = @"\x91\xa4\x91 \x91\x93";. Mais ...

  2. Les caractères ¼ et ´ ne font pas partie de l'encodage MacRoman, vous aurez donc du mal à les utiliser. Êtes-vous sûr de vouloir une chaîne MacRoman plutôt qu'une chaîne Unicode? Peu d'applications utilisent MacRoman, de toute façon.

  3. cStringUsingEncoding: retourne une chaîne C, qui doit être imprimé avec %s, pas %@, puisque ce n'est pas un objet Objective-C.

Cela dit, votre code triera de travail avec:

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

Je dis "genre de travail" parce que, encore une fois, vous ne pouvez pas représenter ce code dans MacRoman.

+0

+1 sauf que le point # 1 est faux. Vous pouvez inclure des caractères non-ascii dans une constante 'NSString' –