【Python】unicode编码和bytes编码不能混用
报错:出现’ascii’ codec can’t decode byte 0xef in position 0:ordinal not in range(128)的错误。
1、unicode和utf-8的区别。
unicode指的是万国码,是一种“字码表”。而utf-8是这种字码表储存的编码方法。unicode不一定要由utf-8这种方式编成bytecode储存,也可以使用utf-16,utf-7等其他方式。目前大多都以utf-8的方式来变成bytecode。
2、Python中字符串类型分为byte string 和 unicode string两种。
如果在python文件中指定编码方式为utf-8(#coding=utf-8),那么所有带中文的字符串都会被认为是utf-8编码的byte string(例如:mystr=”你好”),但是在函数中所产生的字符串则被认为是unicode string。
问题就出在这边,unicode string 和 byte string 是不可以混合使用的,一旦混合使用了,就会产生这样的错误。例如:
self.response.out.write(“你好”+self.request.get(“argu”))
其中,”你好”被认为是byte string,而self.request.get(“argu”)的返回值被认为是unicode string。由于预设的解码器是ascii,所以就不能识别中文byte string。然后就报错了。
以下有两个解决方法:
1.将字符串全都转成bytestring。
self.response.out.write("你好"+self.request.get("argu").encode("utf-8"))
2.将字符串全都转成unicodestring。
self.response.out.write(u"你好"+self.request.get("argu"))
byte string转换成unicodestring可以这样转unicode(unicodestring,"utf-8")
3、出现报错后,将byte string转化为Unicode string的方法
apply_content = unicode(dict[‘apply_content’], ‘utf-8’)
直接将str变成unicode
另外可以用type(string)检查字符串的类型是Unicode还是str类型
链接:https://www.jianshu.com/p/8e5bf2bf9dfb
【Python】unicode编码和bytes编码不能混用相关推荐
- python unicode 标点范围_Unicode 编码 范围
文字部分 ( U+0000 – U+007F) 基本拉丁字符 ( U+0080 – U+00FF) 增补拉丁字符集 1 ( U+0100 – U+017F) 拉丁字符扩展集 A ( U+0180 – ...
- python unicode编码转换中文_python unicode转中文及转换默认编码
一. 在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码.可 ...
- python unicode编码书写方式_python 中文编码 小结 ,json读写,str转换unicode,文字比较...
最近用python做不少整理数据的工作,其中就包含不少关于中文处理的,所以总总结一下方便以后使用 1:json含汉字的utf编码读写 Python f2 = codecs.open('country_ ...
- python跟unicode一样吗_PYTHON编码处理-str与Unicode的区别
一篇关于STR和UNICODE的好文章 整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,http参数等等 ...
- python unicode编码转换中文_Python入门高级教程--Python 中文编码
Python 中文编码 前面章节中我们已经学会了如何用 Python 输出 "Hello, World!",英文没有问题,但是如果你输出中文字符 "你好,世界" ...
- Python 入门 26 —— ASCII 编码、Unicode 编码、 UTF-32、 UTF-16、 UTF-8、 GB2312 编码、 GBK 编码
计算机存储和处理信息都是以一个8位的二进制字节为单位的,例如:0b 1111 0000.一个字母.汉字等如何用一个二进制的数(编码)来表示呢.在计算机发展初期,因为没有人能预料到计算机会有现在这么大的 ...
- Python中Unicode字符串(字符串编码问题)
Python中Unicode字符串(字符串编码问题) 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以 ...
- Unicode(UTF-8, UTF-16)令人混淆的概念 和 python unicode转中文及转换默认编码
Unicode(UTF-8, UTF-16)令人混淆的概念 [转载](https://www.cnblogs.com/fnlingnzb-learner/p/6163205.html) 为啥需要Uni ...
- Python知识点-py2和py3编码
编码 大小 支持语言 ASCII 1个字节 英文 Unicode 2个字节(生僻字4个) 所有语言 UTF-8 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 所有语言 py2编码: ...
最新文章
- OpenGL函数功能glutTimerFunc()
- Python编程神器Jupyter Notebook使用的28个秘诀(附代码)
- 为实验室部署Symantec Antivirus
- python vs java的rsa加密
- Java 动态代理及 RPC 框架介绍
- DL之MobileNetV2:MobileNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- 18.了解各种与排序有关的选择
- java class 转 字节_[转]JAVA字节数据与JAVA类型的转换
- ROS:使用ubuntuKylin17.04安装ROS赤xi龟
- linux内核spi总线驱动分析,Linux下的SPI总线驱动(三)
- cobbler get-loaders 错误解决方法
- mysql启动redis_docker一系列mysql,redis,centos啥的启动参数记个笔记
- 一些常用的字符串方法
- MySQL--存储引擎篇
- java mp4分割_Android(java方法)上实现mp4的分割和拼接 (二)
- [2178]链表的有序集合 (链表的插排法+重复元素的删除) SDUT
- 基于jQuery的AJAX和JSON的实例
- Python编写微信打飞机小游戏(六)
- Windows11动态磁贴替代软件大盘点 _φ(❐_❐✧ windows教程
- 偏最小二乘法(NIPALS经典实现--未简化)
热门文章
- SSM基于微信小程序的外卖点餐系统 毕业设计-附源码2711704
- 人工智能程序可1秒检测出肠癌 准确率86% | 医疗
- 永磁同步电机驱动视频教程_矢量控制_手把手教你写代码_无感FOC_有感FOC_状态观测器_卡尔曼滤波_慧驱动
- 关于springmvc拦截器 controll aop执行顺序
- LAMP应用:Discuz的搭建与配置
- LayIM 3.9.1与ASP.NET SignalR实现Web聊天室快速入门(七)之LayIM与MVC数据交互实现单聊和群聊
- 1.5_18:鸡尾酒疗法(NOIP)
- 放大器的传递函数_所谓传递函数
- 如何以产品经理角度进行产品分析?
- 小码农的职场人生一:由张小平离职引发的一些吐槽