我在从PHP后端接收字符串到我的iOS应用程序时遇到问题。我收到的字符串如下所示:
测试ððððð
这些特殊字符应该是笑脸。现在,我在这里检查了此编码器:
https://encoder.mattiasgeniar.be/index.php
该字符串确实是UTF-8编码的,带有笑脸符号。
测试😀😀😀😀😀
现在我想知道源字符串是什么编码?以及如何将其转换为在iOS上正确显示的UTF-8字符串?
我试过了
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替代序列的开始,开始对上面的表情符号'character'进行编码(0xf0、0x9f,0x98、0x80)。表情符号的3个字节的其余部分将丢失。
[TL; DR]
后端中的某些内容(例如PHP本身)对Unicode的支持不太好。
关于php - 来自后端的字符串应包含表情符号,但呈现为重音字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39625760/