中文被中文解码urlencodee后,有没有办法再转成中文的

42592人阅读
错误调试(6)
& &今天发现一个蛋疼的问题,服务端返回的urlString里面有时含有中文,使用
URLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法又不能完全解决问题.
encodedString&= [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)urlString,NULL,NULL,kCFStringEncodingUTF8);
& &这两种方法当urlString里含有中文时URL编码是正确的,但是如果其中含有已转义的%等符号时,又会再次转义而导致错误.
& &查看方法2参数说明:
CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator,
CFStringRef originalString,
CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped,
CFStringEncoding encoding);
因此做出修改,写出方法:
& &&NSString *encodedString = (NSString *)
& & CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
& & & & & & & & & & & & & & & & & & & & & & (CFStringRef)urlString,
& & & & & & & & & & & & & & & & & & & & & & (CFStringRef)@&!$&'()*+,-./:;=?@_~%#[]&,
& & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & kCFStringEncodingUTF8);
如果在所有的类里都要用到这个方法,可以写成category,然后在头文件import &NSString+URL.h& 即可调用.
NSString+URL.h &文件
@interface NSString (URL)
- (NSString *)URLEncodedS
NSString+URL.m &文件
#import &NSString+URL.h&
@implementation NSString (URL)
- (NSString *)URLEncodedString
NSString *encodedString = (NSString *)
CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)self,
(CFStringRef)@&!$&'()*+,-./:;=?@_~%#[]&,
kCFStringEncodingUTF8);
return encodedS
& & NSString *encodedString = [urlString
URLEncodedString];
& & //encodedString do something
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:190406次
积分:1427
积分:1427
排名:千里之外
原创:24篇
评论:32条
(1)(2)(2)(7)(1)(1)(2)(1)(7)您的位置:
本文网址:
栏目分类??????????????????????????????????特别关注热门排行推荐信息相关信息
页面执行时间0.6719秒 查询数据库37次PHP用json_encode转换数组中文乱码
&>>&&>>&PHP用json_encode转换数组中文乱码
欢迎加“”为主页,windows8风格,0.3s极速加载王柏元的博客专用搜索引擎:极客人,就用“”!
文章评分 1 次,平均分 5.0 :
由于在安卓软件开发实践中,笔者想给软件加上软件更新服务,于是决定依托自己的虚拟主机,用php制作一个自己的。再通过json标准格式输出数据库的查询结果。
一、实例展示
制作代码的简单形式是:
$id = $_GET['id'];//get接受传值
api($id);//执行函数
//定义函数
function api($id){
$array= array(1,2,3);//这是只是示意,表示$array是数组
$json=jsons_encode($array);//通过jsons_encode函数输出数组的json格式
<div class="crayon-num" data-line="crayon-58f9d9<div class="crayon-num crayon-striped-num" data-line="crayon-58f9d9<div class="crayon-num" data-line="crayon-58f9d9<div class="crayon-num crayon-striped-num" data-line="crayon-58f9d9<div class="crayon-num" data-line="crayon-58f9d9<div class="crayon-num crayon-striped-num" data-line="crayon-58f9d9<div class="crayon-num" data-line="crayon-58f9d9<div class="crayon-num crayon-striped-num" data-line="crayon-58f9d9<div class="crayon-num" data-line="crayon-58f9d9<div class="crayon-num crayon-striped-num" data-line="crayon-58f9d9<div class="crayon-num" data-line="crayon-58f9d9
&?php$id = $_GET['id'];//get接受传值api($id);//执行函数//定义函数function api($id){//函数体$array= array(1,2,3);//这是只是示意,表示$array是数组$json=jsons_encode($array);//通过jsons_encode函数输出数组的json格式echo $json;}?&
通过jsons_encode函数把数组转换成json格式时,会发现形如这样的中文乱码:
\u901a\u8baf\u5f55\uff0c\u662f\u738b\u67cf\u5143\u81ea\u4e3b\u5f00\
在反复检查使用编码和数据库编码后,笔者才发现这是jsons_encode函数的问题,造成的原因如下:
二、原因分析:
在存储到数据库时!MySQL 不会存储 unicode 字符:MySQL 仅支持从基本的多语种平面字符 (0×0000-0xFFFF)。请尝试存储一个同义词相反:)
更新: MySQL 5.5.3 上 (其中尚未 GA), 支持补充字符如果您使用 UTF8MB4 编码。
json_encode中文的时候,会把每个中文字符encode成“uxxxx”,而存进数据库的时候,“”被屏蔽了,直接变成”uxxxx”
三、 解决问题:
1. 避免json_encode将中文转换unicode编码.
5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。
$json= json_encode("王柏元的博客", JSON_UNESCAPED_UNICODE);
2. 先将中文字段urlencode,json_encode后,再用urldecode,也可以保证中文不会被转成unicode。
$json=urldecode(json_encode(array('brief'=&urlencode('王柏元的博客),'title'=&urlencode(王柏元的博客)));
四、解决问题的代码
上面分析了问题出现的原因,如果你的版本在5.4或以上,你可以使用上面的解决方案一。
第二种方案是个通解,下面我来提供自己的代码给大家参考:
function jsons_encode($array){
//遍历已有数组,将每个值 urlencode 一下
foreach($array as $key=&$value){
$array[$key]=urlencode($value);
//用urldecode将值反解
return urldecode(json_encode($array));
/**注意:中间省略了数组获取的代码,
你可以使用上面的jsons_encode函数对你的数组进行转换
$json=jsons_encode($array);
12345678910111213141516
&?phpfunction jsons_encode($array){//遍历已有数组,将每个值 urlencode 一下foreach($array as $key=&$value){$array[$key]=urlencode($value); }//用urldecode将值反解 return urldecode(json_encode($array));}/**注意:中间省略了数组获取的代码,你可以使用上面的jsons_encode函数对你的数组进行转换*/&$json=jsons_encode($array);echo $json;?&
本文已在版权印备案,受著作权法律保护,未经允许不得转载!如需转载请联系作者或访问版权印,如果你觉得这篇文章对你有用,可以点击下面的“赞助作者”打赏作者!转载注明原文出处:>>
记录生活,镌刻心路;泼洒文墨,分享技术!王柏元的博客致力于IT经验交流,并原创翻译引进外文文章,打开IT国际化视野
2017年四月
10111213141516
17181920212223
24252627282930
订阅博客周刊
给博主留言
关于本站 记录生活,镌刻心路;泼洒文墨,分享技术!王柏元的博客是王柏元的个人IT博客,致力于IT经验交流,并原创翻译引进英文博客文章,打开IT国际化视野。
您也可以使用第三方帐号快捷登录中文被URLEnCode后,有没有办法再转成中文的?
中文被URLEnCode后,有没有办法再转成中文的?
%E5%8D%81%E4%B8%83%E5%B2%81%E4%B8%8D%E5%93%AD.%E4%B8%BB%E9%A2%98%E6%9B%B2.mp3
在原文件中显示的是这样,我现在想把这段转成中文的,有什么好的办法吗?谢谢
我是要通过form中的文本框将这段字符提交保存到数据库中的,想在ASP中转成中文后保存,谢谢
昵称: mendel &时间:
昵称: 八进制 &时间:
昵称: donothing.net &时间:
昵称: mendel &时间:
昵称: uucadsl &时间:
昵称: anson &时间:C# 将中文乱码转换成中文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C# 将中文乱码转换成中文
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 mysql urlencode 中文 的文章

 

随机推荐