Проблема связана с различными кодировками вы использовали для кодирования и декодирования.
testString=":;Hello \ud83d\ude09\ud83d\ude00 ., <> /?\";
NSData *data = [testString dataUsingEncoding:NSUTF8StringEncoding];
Здесь вы преобразовали строку в данные с использованием кодировки UTF8. Это означает, что он преобразует символы Unicode в 1-4 байта в зависимости от используемого символа юникода. например. \ ude09 переведет на ED B8 89. Объяснение того же доступно in wiki. В основном используется следующий метод:
Теперь, если вы пытаетесь расшифровать это строка в кодировке ASCII, как показано ниже
NSString *strBody = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
выше, обречена на провал, поскольку он не может декодировать ED B8 89 или аналогичные данные Unicode в строку ascii. Вот почему он возвращает ошибку.
Если данные были закодированы в ascii, для преобразования использовался бы литерал ascii hex. Так \ ude09 стал бы «5с 75 64 65 30 39»
Так правильное преобразование будет:
testString=":;Hello \ud83d\ude09\ud83d\ude00 ., <> /?\";
NSData *data = [testString dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *strBody = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
вопрос для вас, почему вы хотите, чтобы кодировать в UTF8 и расшифровывают как ASCII?
Для смайликов, пожалуйста, попробуйте ниже
testString=":;Hello \\ud83d\\ude09\\ud83d\\ude00 ., <> /?";
NSData *data = [testString dataUsingEncoding:NSUTF8StringEncoding];
NSString *strBody = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
Что вы подразумеваете под словом «У меня две строки с одинаковыми символами Юникода»? testString1 и testString2 совершенно разные! –
Текст отличается, но символы Unicode (символы Unicode от Emoji) одинаковы. например, \\ ud83d \\ ude21, это то же самое в обеих строках. –
Отметьте это, как может помочь вам больше http: // stackoverflow.com/questions/26170876/how-to-list-почти-all-emojis-in-swift-for-ios-8-without-use-any-form-of-loo – tejas