UTF-8编码前缀表示"百分比(%)" vs"反斜杠(\)"

时间:2016-05-27 12:56:27

标签: ios encoding utf-8

我只是想知道UTF-8代码符号的前缀。在某些情况下,它使用反斜杠符号(\)表示为\uc774\ud2b8。但是,我也可以使用百分号(%)查找代码。例如%uc774%ud2b8
无论我使用什么,现代浏览器都没有问题,但是当我使用百分比表示法时,NSURL无法识别返回包含空URL的对象的代码。

什么是UTF-8代码的正确表示法,当我使用带有百分比前缀的url字符串的NSURL时,如何解决问题?

编辑:单词UTF-8我错了。引用Unicode character set而不是UTF-8 encoding是正确的。

2 个答案:

答案 0 :(得分:1)

这与UTF-8无关。各种语言(C,Java)使用\u表示法将Unicode字符编码为字符串。当遇到字符串"\uc774\ud2b8"时,它通常以UTF-8编码,这意味着它是字节序列0xEC 0x9D 0xB4 0xED 0x8A 0xB8。但它可以通过其他方式编码,例如0xC774 0xD2B8(UTF-16)。这取决于您的系统。但重点是这个字符串是2个unicode字符。

%编码完全不同。它是由RFC 3986定义的URI保留字符的百分比编码标准。当编译器遇到"%uc774%ud2b8"时,它会将其编码为"%" " U" " 7" " 7" " 4"等(通常它会以UTF-8编码这些中的每一个,但它取决于系统)。大多数语言都不会将%视为特殊语言。 \u(和\一般)是该语言的一部分。 %不是。所以这个字符串是12个unicode字符长。该语言不关心%。 URL解析器可以。

为了让iOS将字符串转换为NSURL,必须正确编码字符串。这可能包括URL的某些部分中的百分比编码,并且可能禁止URL的其他部分中的百分比编码(以及哪些字符可能或必须是百分比编码在URL的不同部分中可以是不同的)。这些规则在RFC 3986中有详细说明。

答案 1 :(得分:0)

您可以通过

执行此操作

老方法

    NSString * newString = [myString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //Deprecated now

myString是urlstring,有百分之,newString是你想要的字符串。

新方法:

 NSString * newString = [myString stringByRemovingPercentEncoding];

希望这会有所帮助:)