Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有表情符号/表情url编码的NSString_Ios_Objective C_Encoding_Nsstring_Urlencode - Fatal编程技术网

Ios 带有表情符号/表情url编码的NSString

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]; 我正

我试图将UITextField中可能包含特殊字符和表情的内容转换为可以在GET请求中传递给PHP服务的内容

如果我根本没有对字符串进行编码,emojis就会显示得很好(我可以在DB中看到它们,它们会正确地返回给我)。。。但是如果我添加特殊字符(~!@#$%等),GET请求就会阻塞

因此,我通过url编码器运行字符串:

[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字符。在这种情况下我应该怎么做。