文档章节

url中文转码

z
 zhongtu
发布于 2014/01/10 14:42
字数 314
阅读 209
收藏 6

调用接口参数含有中文字符,调用出错。谷歌百度了半天关于IOS转码的,都没有效果。

后来在官方文档找到了解决方法:

CFURLCreateStringByAddingPercentEscapes

Discussion

The characters escaped are all characters that are not legal URL characters (based on RFC 3986), plus any characters inlegalURLCharactersToBeEscaped, less any characters in charactersToLeaveUnescaped. To simply correct any non-URL characters in an otherwise correct URL string, pass NULL for the allocatorcharactersToLeaveEscaped, and legalURLCharactersToBeEscaped parameters, and kCFStringEncodingUTF8 as the encoding parameter.

It may be difficult to use this function to "clean up" unescaped or partially escaped URL strings where sequences are unpredictable and you cannot specify charactersToLeaveUnescaped. Instead, you can "pre-process" a URL string using CFURLCreateStringByReplacingPercentEscapesUsingEncodingthen add the escape characters using CFURLCreateStringByAddingPercentEscapes, as shown in the following code fragment.

CFStringRef originalURLString = CFSTR("http://online.store.com/storefront/?request=get-document&doi=10.1175%2F1520-0426(2005)014%3C1157:DODADSS%3E2.0.CO%3B2");
CFStringRef preprocessedString =
    CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, originalURLString, CFSTR(""), kCFStringEncodingUTF8);
CFStringRef urlString =
    CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, preprocessedString, NULL, NULL, kCFStringEncodingUTF8);
url = CFURLCreateWithString(kCFAllocatorDefault, urlString, NULL);

英文我不是很懂,不过凭着直觉就是它了。拿过来处理一下:

[plain] view plaincopy

  1. NSString *urlString = @"http://test.com/root?&city=中国";  

  2.     //把NSString 转 CFStringRef  

  3.     CFStringRef originalURLString = (__bridge CFStringRef)urlString;  

  4.     CFStringRef preprocessedString =  

  5.     CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, originalURLString, CFSTR(""), kCFStringEncodingUTF8);  

  6.     CFStringRef urlString1 =  

  7.     CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, preprocessedString, NULL, NULL, kCFStringEncodingUTF8);  

  8.     CFURLRef url = CFURLCreateWithString(kCFAllocatorDefault, urlString1, NULL);  

  9.     //CFStringRef 转 NSString   

  10.     urlString = (__bridge NSString*) url;  

  11.   

  12.     //转换后,发现并非NSString 而是NSURL 这很奇怪 所以再转一次  

  13.     if ([urlString isKindOfClass:[NSURL class]]) {  

  14.         NSURL *url2 = (__bridge NSURL*) url;;  

  15.         urlString = [url2 absoluteString];  

  16.     }  

  17.     NSLog(@"nsstring:%@",urlString);  


大概就这样。搞定。


© 著作权归作者所有

共有 人打赏支持
z
粉丝 5
博文 9
码字总数 6191
作品 0
武汉
私信 提问
tomcat问题总结

关于tomcat作为服务器 URL访问的一些问题 由于tomcat对中文支持不是很好,所以在某些情况下导致URL无法访问或者找不到路径的问题,一般主要存在两个问题: 1.含有中文的URL无法访问 上传一个...

白志华
2015/10/20
33
0
[长期更新]Debug日志

1.Url地址栏传参数中文乱码问题例子:当地址栏向后台输入参数stuclass=14级02班的时候,正常情况下浏览器需要讲url中文参数转码成14%E7%BA%A702%E7%8F%AD但是有的浏览器不能正确转码,所以需...

zyl111ok
2018/01/03
0
0
ie 11 跨域问题

问题描述: 用angular2去做http请求时在IE11上测试出现异常,在谷歌/火狐上测试一切正常 原因分析: http传参时传入了中文汉字的参数,谷歌和火狐浏览器都对中文汉字做了URL转码,但是IE11没...

今天来找bug
2016/10/11
41
0
关于jsp访问路径带中文值需encodeURI两次的原因

jsp往后台传值的时候,一般可以通过路径传值和ajax传值。 其中通过ajax post传值不会出现中文乱码现象,但路径传值如果不通过特殊的编码,后台可能获取到的是一串乱码。 encodeURI可以帮助我...

文文1
2016/07/12
184
0
url路径传中文显示乱码以及出现乱码解决方案

有时候需要在url路径传递中文,但是却又不想在url上显示中文。可以使用js提供的encodeURI将路径进行编码操作。或者对指定的中文用encodeURIComponent进行编码。 中文显示问题解决了,我们从服...

cyper
2013/10/05
0
1

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
7分钟前
0
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
0
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
2
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
7
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部