iOS utf-8和 url encode

utf-8编码可以直接百度百科了解一些,有百利而无一害。

首先,看看java的encode方法。

URLEncoder.encode(urlStr,"utf-8")

All characters except letters ('a'..'z', 'A'..'Z') and numbers ('0'..'9') and characters '.', '-', '*', '_' are converted into their hexadecimal value prepended by '%'.In addition, spaces are substituted by '+'.
翻译过来就是:所有的字符除了@[@[a..z], @[A..Z],@[0-9],@".",@"-",@"*",@"_"]都被转成了指定编码的16进制的值,同时会在16进制的值前面预置‘%’。特别的,空格会被转成‘+’。

URL传输需要字符串的规则是:
 1:Characters in the unreserved character set as defined by(ALPHA, DIGIT, "-", ".", "_", "~") MUST NOT be encoded. 
 2:All other characters MUST be encoded.
 3:The two hexadecimal characters used to represent encoded characters MUST be upper case.


翻译:
 所有字符除了@[ALPHA,DIGIT,@"-",@".","_","~"]不能encode外,其他都需要encode,转码后的16进制字符必须大写。ALPHA,在这个位置估计代表字母'a'..'z'和'A'..'Z',DIGIT代表数字。

注:加粗斜体的英文是从别人的文章中复制的,没找到原出处,真是遗憾。

如果我们对整个路径进行encode,显然,会出问题,我们应该只对可能含有中文、特殊符号的部分进行encode。

再看看,utf-8转码。utf-8编码,字符和数字不进行编码,中文和特殊字符转码后也会预置‘%’号。encode时指定utf-8之后的编码,和utf-8比起来,主要区别在于' '转'+',当然还有其他的几个字符。
我曾遇到过,后台传给我数据,html字符串存在json里面,解析的时候,不是合格的json字符串。为了解决这个问题,先将html字符串转成utf-8,在放入json,传过来,解析的时候,再转回来。含有中文的字符串转成utf-8编码,所占内存大小会显著增加,避免多次转码或者encode。

iOS没有像java那样直接提供urlencode和urldecode,但是utf-8是有的,分别为。

    string = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    string = [string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];



你可能感兴趣的:(ios)