2010-10-27 3 views

ответ

0

Это будет потому, что Mac OS Roman не имеет ничего общего с кодировкой base64. Кодирование Base-64 - это еще одно кодирование, которое применяет байты, которые представляют исходную строку. Если вы хотите увидеть исходную строку, вам сначала нужно будет дешифровать байтовую строку base-64, а затем вычислить исходную строчную кодировку, чтобы ее интерпретировать.

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 неверна. Вы можете включать символы не-ascii в константу 'NSString' –

Смежные вопросы