来自后端的字符串应包含表情符号,但呈现为重音字母
String from backend should contain emoji but is rendered as accented letters
我在从 PHP 后端接收字符串到我的 iOS 应用程序时遇到问题。我收到的字符串如下所示:
Test ððððð
那些特殊字符应该是笑脸。现在我在这里检查了这个编码器:
https://encoder.mattiasgeniar.be/index.php
并且该字符串是 UTF-8 编码的,确实是带有笑脸的字符串。
Test
现在我想知道源字符串是什么编码?以及如何将其转换为在 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];
但其中 none 有效。我有点困惑源字符串的编码方式。
您的 Foundation 应用程序可能没有任何问题(顺便说一下,它非常非常好地原生支持 UTF-8 和 UTF-16)。
回答你的最后一个问题:
I'm kind of baffled what the source string is encoded like.
如果您打开该字符串并以字节为单位查看它,您会注意到 eth 字符('ð' [冰岛语和法罗语使用此字符])是 UTF-8 代码点 0xf0
.
0xf0
也是 UTF-8 代理项序列的开始,用于开始对上面的 Emoji 字符 '' 进行编码(0xf0、0x9f、0x98、0x80)。表情符号的其余 3 个字节丢失。
[TL;DR]
您后端的某些东西,也许 PHP 本身,对 Unicode 的支持不是很好。
我在从 PHP 后端接收字符串到我的 iOS 应用程序时遇到问题。我收到的字符串如下所示:
Test ððððð
那些特殊字符应该是笑脸。现在我在这里检查了这个编码器: https://encoder.mattiasgeniar.be/index.php 并且该字符串是 UTF-8 编码的,确实是带有笑脸的字符串。
Test
现在我想知道源字符串是什么编码?以及如何将其转换为在 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];
但其中 none 有效。我有点困惑源字符串的编码方式。
您的 Foundation 应用程序可能没有任何问题(顺便说一下,它非常非常好地原生支持 UTF-8 和 UTF-16)。
回答你的最后一个问题:
I'm kind of baffled what the source string is encoded like.
如果您打开该字符串并以字节为单位查看它,您会注意到 eth 字符('ð' [冰岛语和法罗语使用此字符])是 UTF-8 代码点 0xf0
.
0xf0
也是 UTF-8 代理项序列的开始,用于开始对上面的 Emoji 字符 '' 进行编码(0xf0、0x9f、0x98、0x80)。表情符号的其余 3 个字节丢失。
[TL;DR]
您后端的某些东西,也许 PHP 本身,对 Unicode 的支持不是很好。