Строка из бэкэнда должна содержать эмодзи, но отображается как буквы с акцентом

У меня проблема с получением строки из бэкэнда PHP в мое приложение для iOS. Строка, которую я получаю, выглядит так:

Тестирование

Эти специальные символы должны быть смайликами. Теперь я проверил с этим кодером здесь:
https://encoder.mattiasgeniar.be/index.php
и строка в кодировке UTF-8 действительно со смайликами.

Тест ����������

Теперь интересно, какая кодировка является исходной строкой? И как я могу преобразовать его в строку UTF-8, которая правильно отображается на iOS?

я пробовал

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:@"Test ððððð" options:0];
NSString *message = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];

а также

NSString *message = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (CFStringRef)@"Test ððððð", CFSTR(""), kCFStringEncodingUTF8);

а также

NSString *message = [@"Test ððððð" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

но никто из них не работал. Я немного озадачен тем, как кодируется исходная строка.

1

Решение

Вероятно, нет ничего плохого в вашем приложении Foundation (которое, кстати, изначально поддерживает UTF-8 & UTF-16 очень и очень хорошо).


Чтобы ответить на ваш последний вопрос:

Я немного озадачен тем, как закодирована исходная строка.

Если вы взломаете эту строку и посмотрите на нее с точки зрения байтов, вы заметите, что символ eth (‘ð’ [этот символ используют исландцы и фарерцы)) — это кодовая точка UTF-8. 0xf0,

0xf0 также является началом суррогатной последовательности UTF-8 для начала кодирования символа Emoji ‘��’ выше (0xf0, 0x9f, 0x98, 0x80). Остальные 3 байта для Emoji потеряны.

[TL; DR]

Что-то в вашем бэкэнде, может быть, сам PHP, не очень хорошо поддерживает Unicode.

2

Другие решения

Других решений пока нет …