iOS中字符串的UTF-8编码与解码

一、背景需求

有时候我们在项目中经常会遇到一个URL字符串转成NSURL之后为空,或者将URL字符串转成NSURL之后,请求数据是请求不到的,这个问题很有可能是URL字符串的编码解码问题。其中很常见的是GET请求中拼接字符串的时候其中含有中文。

二、问题解决

这个问题系统已经有API,我们看下系统实现

iOS9之前用的方法

  • 编码
    [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  • 解码
    [urlString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    其中urlString是我们给定的URL字符串

iOS9之后系统推荐使用

  • 编码
    [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]];
  • 解码
    [urlString stringByRemovingPercentEncoding];
    对于NSCharacterSet有问题的可参考NSCharacter​Set
    其中以下是有关于转换的特殊字符,我们根据需要选择合适的AllowedCharacterSet
URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`
三、使用效果
NSString *urlString3 = @"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1493299941944&di=76092dbeceb09618622fd7993510c9fb&imgtype=0&src=http%3A%2F%2Fmvimg1.meitudata.com%2F55e2b8683d7464031.jpg";
NSString *url = [urlString3 stringByRemovingPercentEncoding];
NSLog(@"%@",url);

打印结果如下:
https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1493299941944&di=76092dbeceb09618622fd7993510c9fb&imgtype=0&src=http://mvimg1.meitudata.com/55e2b8683d7464031.jpg

以上!!!

你可能感兴趣的:(iOS中字符串的UTF-8编码与解码)