Ios 带有表情符号/表情url编码的NSString
我试图将UITextField中可能包含特殊字符和表情的内容转换为可以在GET请求中传递给PHP服务的内容 如果我根本没有对字符串进行编码,emojis就会显示得很好(我可以在DB中看到它们,它们会正确地返回给我)。。。但是如果我添加特殊字符(~!@#$%等),GET请求就会阻塞 因此,我通过url编码器运行字符串:Ios 带有表情符号/表情url编码的NSString,ios,objective-c,encoding,nsstring,urlencode,Ios,Objective C,Encoding,Nsstring,Urlencode,我试图将UITextField中可能包含特殊字符和表情的内容转换为可以在GET请求中传递给PHP服务的内容 如果我根本没有对字符串进行编码,emojis就会显示得很好(我可以在DB中看到它们,它们会正确地返回给我)。。。但是如果我添加特殊字符(~!@#$%等),GET请求就会阻塞 因此,我通过url编码器运行字符串: [commentText stringByAddingPercentEscapesUsingEncoding:NSNonLossyASCIIStringEncoding]; 我正
[commentText stringByAddingPercentEscapesUsingEncoding:NSNonLossyASCIIStringEncoding];
我正在使用NSNonLossySyShistringEncoding来正确地输出emojis,这是可行的,但是使用它来编码会返回一个nil字符串。事实上,唯一不返回nil的编码是UTF8,但它使用百分比转义来填充emojiunicode
我该怎么做?我是否必须为这种情况编写自己的字符串替换,或者是否有一种iOS方式可以做到这一点,但我没有看到
干杯
Chris
nsnonlossysiastringencoding
到stringByAddingPercentEscapesUsingEncoding:
返回nil
,因为您传递的字符串不是ASCII。使用NSUTF8StringEncoding
percent转义表情符号,这是我所期望的结果。如果您的服务器端中间件没有自动从查询字符串中删除表情符号,那么您应该在服务器端代码中这样做,如果它导致了上游问题 nsnonlossysistringencoding
到stringByAddingPercentEscapesUsingEncoding:
返回nil
,因为您传递的字符串不是ASCII。使用NSUTF8StringEncoding
percent转义表情符号,这是我所期望的结果。如果您的服务器端中间件没有自动从查询字符串中删除表情符号,那么您应该在服务器端代码中这样做,如果它导致了上游问题 您可以使用下面的代码对表情符号字符串进行编码
NSString *uniText = [NSString stringWithUTF8String:[youremojistring UTF8String]];
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];
您可以使用下面的代码对表情符号字符串进行编码
NSString *uniText = [NSString stringWithUTF8String:[youremojistring UTF8String]];
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];
使用此选项可以转义表情符号:
NSString *escapedEmoji = [NSString stringWithCString:[emojiString cStringUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding];
NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding];
以下是unescape表情符号:
NSString *escapedEmoji = [NSString stringWithCString:[emojiString cStringUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding];
NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding];
使用此选项可以转义表情符号:
NSString *escapedEmoji = [NSString stringWithCString:[emojiString cStringUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding];
NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding];
以下是unescape表情符号:
NSString *escapedEmoji = [NSString stringWithCString:[emojiString cStringUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding];
NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding];
nsnonlossysistringencoding
如果返回nil,则显然不起作用。至于NSUTF8StringEncoding
,“…使用百分比转义来咀嚼表情符号unicode。”这正是百分比转义的作用。你期望发生什么?我需要一些东西,可以保持完整的unicode位不变,同时避免GET请求通过。UTF8获取并转义表情符号unicode中的字符,从而使其无法使用。对于这三个表情符号(使用NonLossySAscii编码可以保持它们的完整性。除了在将nsNonLossySAscitringEncoding
传递到stringByAddingPercentEscapesUsingEncoding:
返回零,正如您所说的那样。这是因为字符串不是ASCII。好吧……那么解决方案是什么?让表情成功传输的唯一方法通过中间件,DB根本不需要对它们进行编码。但这只有在传递的字符串不包含任何特殊字符的情况下才能起作用。似乎iOS 7采用Unicode 6规范来处理表情符号,没有框架函数来处理扩展字符和url编码。我基本上是问是否真的有一个,我只是没有找到它,或者如果我需要滚动我自己的(我最终这样做只是为了继续)。nsnonlossysiastringencoding
如果返回nil,显然不起作用。至于NSUTF8StringEncoding
,“…这会用百分比转义来吞食表情符号unicode。”这正是百分比转义所做的。你期望发生什么?我需要一些东西,在转义阻止GET请求通过的东西时,保持完整的unicode位不变。UTF8获取并转义表情符号unicode中的字符,这使得它无法使用。对于这三个表情符号(使用NonLossySAscii编码可以保持它们的完整性。除了在将nsNonLossySAscitringEncoding
传递到stringByAddingPercentEscapesUsingEncoding:
返回零,正如您所说的那样。这是因为字符串不是ASCII。好吧……那么解决方案是什么?让表情成功传输的唯一方法通过中间件,DB根本不需要对它们进行编码。但这只有在传递的字符串不包含任何特殊字符的情况下才能起作用。似乎iOS 7采用Unicode 6规范来处理表情符号,没有框架函数来处理扩展字符和url编码。我基本上是问是否真的有一个,我只是没有找到它,或者如果我需要自己滚动(我这样做只是为了继续前进)。这就是问题所在。通过UTF8进行编码可以工作,在填充到数据库之前提供中间件UNESCAPE。然而,奇怪的是,除非我使用NSNonLossyShistringEncoding解码生成的JSON,否则我会收到垃圾。NonLossy会给我实际的表情。不确定为什么,但这对我有效。这就是问题所在。Enco外出时通过UTF8进行的ding可以工作,在填充到DB之前提供中间件UNESCAPE。然而,奇怪的是,除非我使用NSNonLossyShistringEncoding对生成的JSON进行解码,否则我会收到垃圾。NonLossy会给我实际的表情。不确定为什么,但这对我有效。你的示例代码工作得很完美。我必须对聊天进行编码要以ASCII字符串形式发送的消息。我正在聊天应用程序中使用此编码。我的情况是,此编码适用于(iOS到iOS消息),但它会从(iOS到android)添加一些额外的unicode字符。在这种情况下我应该怎么做。您的示例代码非常完美。我必须将聊天信息编码为ASCII字符串发送。我正在聊天应用程序中使用这种编码。我的案例适用于(iOS到iOS消息),但它会从(iOS到android)添加一些额外的unicode字符。在这种情况下我应该怎么做。