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 ...
随机推荐
- iOS学习-圆形进度条
效果: #import <UIKit/UIKit.h> @interface HsProfitRatePieWidgets : UIView { UILabel *_textLabel; ...
- SQL语句-创建索引
语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名)WITH FILLFACTOR = 填充因子值0~100 GO USE 库名GO IF EXISTS (SELECT * FRO ...
- 如何给frame标签的src属性以及a标签的href属性自动设值
<frame src="" id="main" name="main" marginwidth="0" margi ...
- Map工具系列-07-TFS变更集提取工具
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- JAVA中保留小数的多种方法
// 方式一:double f = 3.1516;BigDecimal b = new BigDecimal(f);double f1 = b.setScale(2, BigDecimal.ROUND ...
- 查看 SHA1
keytool -v -list -keystore C:\Users\tianyingzhong\.android\debug.keystore 输入密钥库口令: android android
- checkbox全选与非全选之间的切换
<div id="congras_area"> <input type="checkbox" name="" id=&qu ...
- ecshop随机分类
$get_categories_tree = get_categories_tree(); $smarty->assign('category_1', RandArray($get_catego ...
- yum---Linux软件安装与管理
查询: yum list #查询所有可用的软件包列表 yum search keywords #搜索服务器上所有和关键字相关的软件包 安装: yum -y install 包名 options: in ...
- vtk多线程简单测试
vtkMultithreader is a class that provides support for multithreaded execution using sproc() on an SG ...