urlencode遇到中文编码问题
urlencode并不会改变输入的编码格式, 默认会将中文输出为 gbk 编码, 类似的, quote 会对中文进行 gbk 编码
不过, 当遇到嵌套多层的字典时, 问题就来了, 中文会被 utf8 编码, 原因是, 除去最外层的里面整个字典会被认为是一个字符串, 当然, 没有错.
问题是, 内层字典中的中文键值会被转换成utf8格式.
>>> from urllib import urlencode
>>> urlencode({"n":"你还"})
'n=%E4%BD%A0%E8%BF%98'
>>>
输出正常, 岁月静好
>>> urlencode({"a":{"n":"你还"}})
'a=%7B%27n%27%3A+%27%5Cxe4%5Cxbd%5Cxa0%5Cxe8%5Cxbf%5Cx98%27%7D'
问题来了, 某些接口需要 gbk 编码, 怎么破?
现在, 假设有个很奇葩的接口, 它需要所有的引号都是双引号%22, urlencode 默认输出单引号%27, 所有的中文都是gbk.
有个说法, 你可以先 quote 再 urlencode, 但是, 有个潜在的坑是, quote 生成的 % 会被urlencode 翻译成 %25
>>> from urllib import quote
>>> quote("你还")
'%E4%BD%A0%E8%BF%98'
正常的输出, 现世安稳 >>> urlencode({"a":{"n":quote("你还")}})
'a=%7B%27n%27%3A+%27%25E4%25BD%25A0%25E8%25BF%2598%27%7D'
迷之%25, 其实就是 %
比较简单粗暴的做法
>>> urlencode({"a":{"n":quote("你还")}}).replace("", "").replace("", "")
'a=%7B%22n%22%3A%22%E4%BD%A0%E8%BF%98%22%7D'
Python 3 就不会有这个问题, 除了还是把双引号搞成了单引号
>>> from urllib.parse import urlencode
>>> urlencode({"a":{"n":"你还"}})
'a=%7B%27n%27%3A+%27%E4%BD%A0%E8%BF%98%27%7D'
urlencode遇到中文编码问题的更多相关文章
- php使用urlencode对中文编码而引出的问题:urlencode和rawurlencode的区别
事件背景: 之前做h5小游戏,需要后端输出用户的相关信息给前端,输出的内容有:用户id,用户昵称等字段,使用get方式传参.后端使用PHP语言对中文昵称进行格式化编码,使用的是常用的urlencode ...
- PHP使用urlencode对中文编码时空格、加号的问题
使用urlencode这个函数进行格式化,urlencode函数会把空格编码为为:+ 当然,前端在接收时可以解码后进行替换 + 为空格的方式处理. 但是这样就多做了一步,很麻烦,有的时候我们的数据接口 ...
- python处理url中的中文编码,以及其他编码问题
1.python中的urlencode与urldecode 2.各种编码转换在线工具 3.python用于url解码和中文解析的小脚本(python url decoder) 4.如何只对url中的中 ...
- C# HttpRequest 中文编码问题
工作中的项目要用到别家的网络短信平台,工作中遇到中文编码的问题,特总结以备忘. GET方法: public string DoWebRequest(string url) { ...
- JS中URL编码参数(UrlEncode)
JS中URL编码参数(UrlEncode) 网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数.参数parameter由于用类似URL的 ...
- Windows Azure 微软公有云体验(三) IIS中文编码解决方案
Windows Azure 微软公有云已经登陆中国有一段时间了,现在是处于试用阶段,Windows Azure的使用将会给管理信息系统的开发.运行.维护带来什么样的新体验呢? Windows Azur ...
- C#HttpUtility.UrlEncode 大写问题
工作上和另一个公司对接,调对方的api需要用到md5加密,加密前要使用HttpUtility.UrlEncode,对方接口一直返回验证错误,定位了问题发现是中文编码使用HttpUtility.UrlE ...
- php json数据处理中文编码
<?php function Notice(){ include './include/conn.php'; //数据库链接文件 $sql_notice = mysql_query('SELEC ...
- PHP 中 json_encode中文处理、urlencode方法、post中文乱码
当使用php自带的json_encode对数据进行编码时,中文都会变成unicode,导致不可读.如:对字符串”厦门“进行json_encode后,输出的是"\u53a6\u95e8&quo ...
随机推荐
- 在linux上如何通过composer安装yii
Composer可以理解成一个依赖管理工具 它能解决以下问题 a) 你有一个项目依赖于若干个库. b) 其中一些库依赖于其他库. c) 你声明你所依赖的东西. d) Composer 会找出哪个版 ...
- C#执行Dos命令公用方法
private static string InvokeCmd(string cmdArgs) { string Tstr = ""; Process p = new Proces ...
- Javascript实现时间转换为多少天前
//实现时间转换,这篇文章发布时间为 2016/1/20 19:59:30 文章发表时间戳为:1453291170000于:11月前function getDateDiff(dateTimeStamp ...
- Ubuntu安装RobotFramework
安装Python Ubuntu默认已安装 安装pip wget https://bootstrap.pypa.io/get-pip.py python get-pip.py 安装RobotFramew ...
- Git,non-fast-forward
当把coding好的code,push到Git时会出现这个错误:master[rejected non-fast-forward] 问题(Non-fast-forward)的出现原因在于:git仓库 ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- [bigdata] 从Cloudera Manager中彻底删除服务器
1. 在CM中主机页里,选定要删除的服务器,选择操作“从群集中删除”. 2. 登录到主机,执行chkconfig,显示有cloudera-scm-agent服务, 执行service cloudera ...
- JAVA中ListIterator和Iterator详解与辨析
在使用Java集 合的时候,都需要使用Iterator.但是java集合中还有一个迭代器ListIterator,在使用List.ArrayList. LinkedList和Vector的时候可以使用 ...
- ORACLE常用数值函数、转换函数、字符串函数
本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数.分二类介绍,分别是: 著名函数篇 -经常用到的函数 非著名函数篇-即虽然很少用到,但某些情况下却很实用 注:N表 ...
- 推荐几款我一直在用的chrome插件(下)
请先看:推荐几款我一直在用的chrome插件(上) 6. Pocket 可以很方便的保存文章.视频等供以后查看,即实现了“Read it later”功能.有了 Pocket,您可以将所有想下次读的内 ...