2014-02-18 3 views
0

я получаю символ * с латинской буквой например печатью: M \ xe4da PrimavesiObjective C Юникод символ * для NSString

я пытаюсь преобразовать его в NSString, конечный результат должен быть Мад Primavesi.

Кто-нибудь знает, как вести разговор?

Благодаря

+0

Всем вы, ребята, думаете, что это похоже на UTF-8: Нет, это не так. Я не буду спускать вниз, но ваши ответы бывают быстрыми и неправильными. Будьте осторожны при отправке ответов. – user3125367

+0

Является ли ваша строка закодированной в приложении или она отправляется из другого места, как сервер? Мой ответ ниже объясняет некоторые результаты с вашего \ x экранирования. –

ответ

0

Попробуйте NSString API stringWithCString:encoding:, как показано ниже,

`[NSString stringWithCString:cString encoding:NSUTF8StringEncoding];` 
0
char *latinChars = "M\xe4da Primavesi"; 
    NSString *chatStr = [NSString stringWithCString:latinChars encoding:NSASCIIStringEncoding]; 
    NSLog(@"chatStr:%@", chatStr); 

Результат: Mu Primavesi

И я попробовать:

char *latinChars = "M\xe4 da Primavesi"; //add an blank for 'da' 
     NSString *chatStr = [NSString stringWithCString:latinChars encoding:NSASCIIStringEncoding]; 
     NSLog(@"chatStr:%@", chatStr); 

Результат: Mä da Primavesi

+0

Это правильно? Не отправляйте неправильный ответ – Mani

+0

@iMani, поэтому я показываю результат моего NSLog, конечный результат определяется NSStringEncoding. Я просто не пробовал все значения перечисления – simalone

+0

ASCII 7-бит и не содержит E4. У вас есть правильный результат только по совпадению. Реальное кодирование - latin1. – user3125367

0

Похоже на latin1.

[NSString stringWithCString:cString encoding: NSISOLatin1StringEncoding] 
1

Кодирование вы хотите NSISOLatin1StringEncoding:

NSString *latin = [NSString stringWithCString:"M\xe4da Primavesi" encoding:NSISOLatin1StringEncoding]; 

НО вы заметите, что это печатает MÚ Primavesi. Это потому, что \x жадный и интерпретирует "da" как часть шестнадцатеричного \xe4da. Вы должны найти способ отделить часть "\xe4" с частью "da".

Это работает:

NSString *latin = [NSString stringWithCString:"M\xe4""da Primavesi" encoding:NSISOLatin1StringEncoding]; // prints Mäda Primavesi 

Я предлагаю вам кодировать латинский C-String с использованием UTF-8 строки "M\u00e4da Primavesi" вместо этого, и расшифровать его с NSUTF8StringEncoding.

+0

В разделе «greedy2» у вас есть \ xefda вместо \ xe4da. Пожалуйста, исправьте, я не могу редактировать (только 1 символ) –

+0

Исправлена ​​опечатка. –

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