У меня проблема с получением строки из бэкэнда 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];
но никто из них не работал. Я немного озадачен тем, как кодируется исходная строка.
Вероятно, нет ничего плохого в вашем приложении Foundation (которое, кстати, изначально поддерживает UTF-8 & UTF-16 очень и очень хорошо).
Я немного озадачен тем, как закодирована исходная строка.
Если вы взломаете эту строку и посмотрите на нее с точки зрения байтов, вы заметите, что символ eth (‘ð’ [этот символ используют исландцы и фарерцы)) — это кодовая точка UTF-8. 0xf0
,
0xf0
также является началом суррогатной последовательности UTF-8 для начала кодирования символа Emoji ‘’ выше (0xf0, 0x9f, 0x98, 0x80). Остальные 3 байта для Emoji потеряны.
Что-то в вашем бэкэнде, может быть, сам PHP, не очень хорошо поддерживает Unicode.
Других решений пока нет …