报错:出现’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编码不能混用相关推荐

  1. python unicode 标点范围_Unicode 编码 范围

    文字部分 ( U+0000 – U+007F) 基本拉丁字符 ( U+0080 – U+00FF) 增补拉丁字符集 1 ( U+0100 – U+017F) 拉丁字符扩展集 A ( U+0180 – ...

  2. python unicode编码转换中文_python unicode转中文及转换默认编码

    一. 在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码.可 ...

  3. python unicode编码书写方式_python 中文编码 小结 ,json读写,str转换unicode,文字比较...

    最近用python做不少整理数据的工作,其中就包含不少关于中文处理的,所以总总结一下方便以后使用 1:json含汉字的utf编码读写 Python f2 = codecs.open('country_ ...

  4. python跟unicode一样吗_PYTHON编码处理-str与Unicode的区别

    一篇关于STR和UNICODE的好文章 整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,http参数等等 ...

  5. python unicode编码转换中文_Python入门高级教程--Python 中文编码

    Python 中文编码 前面章节中我们已经学会了如何用 Python 输出 "Hello, World!",英文没有问题,但是如果你输出中文字符 "你好,世界" ...

  6. Python 入门 26 —— ASCII 编码、Unicode 编码、 UTF-32、 UTF-16、 UTF-8、 GB2312 编码、 GBK 编码

    计算机存储和处理信息都是以一个8位的二进制字节为单位的,例如:0b 1111 0000.一个字母.汉字等如何用一个二进制的数(编码)来表示呢.在计算机发展初期,因为没有人能预料到计算机会有现在这么大的 ...

  7. Python中Unicode字符串(字符串编码问题)

    Python中Unicode字符串(字符串编码问题) 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以 ...

  8. Unicode(UTF-8, UTF-16)令人混淆的概念 和 python unicode转中文及转换默认编码

    Unicode(UTF-8, UTF-16)令人混淆的概念 [转载](https://www.cnblogs.com/fnlingnzb-learner/p/6163205.html) 为啥需要Uni ...

  9. Python知识点-py2和py3编码

    编码 大小 支持语言 ASCII 1个字节 英文 Unicode 2个字节(生僻字4个) 所有语言 UTF-8 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 所有语言 py2编码: ...

最新文章

  1. OpenGL函数功能glutTimerFunc()
  2. Python编程神器Jupyter Notebook使用的28个秘诀(附代码)
  3. 为实验室部署Symantec Antivirus
  4. python vs java的rsa加密
  5. Java 动态代理及 RPC 框架介绍
  6. DL之MobileNetV2:MobileNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  7. 18.了解各种与排序有关的选择
  8. java class 转 字节_[转]JAVA字节数据与JAVA类型的转换
  9. ROS:使用ubuntuKylin17.04安装ROS赤xi龟
  10. linux内核spi总线驱动分析,Linux下的SPI总线驱动(三)
  11. cobbler get-loaders 错误解决方法
  12. mysql启动redis_docker一系列mysql,redis,centos啥的启动参数记个笔记
  13. 一些常用的字符串方法
  14. MySQL--存储引擎篇
  15. java mp4分割_Android(java方法)上实现mp4的分割和拼接 (二)
  16. [2178]链表的有序集合 (链表的插排法+重复元素的删除) SDUT
  17. 基于jQuery的AJAX和JSON的实例
  18. Python编写微信打飞机小游戏(六)
  19. Windows11动态磁贴替代软件大盘点 _φ(❐_❐✧ windows教程
  20. 偏最小二乘法(NIPALS经典实现--未简化)

热门文章

  1. SSM基于微信小程序的外卖点餐系统 毕业设计-附源码2711704
  2. 人工智能程序可1秒检测出肠癌 准确率86% | 医疗
  3. 永磁同步电机驱动视频教程_矢量控制_手把手教你写代码_无感FOC_有感FOC_状态观测器_卡尔曼滤波_慧驱动
  4. 关于springmvc拦截器 controll aop执行顺序
  5. LAMP应用:Discuz的搭建与配置
  6. LayIM 3.9.1与ASP.NET SignalR实现Web聊天室快速入门(七)之LayIM与MVC数据交互实现单聊和群聊
  7. 1.5_18:鸡尾酒疗法(NOIP)
  8. 放大器的传递函数_所谓传递函数
  9. 如何以产品经理角度进行产品分析?
  10. 小码农的职场人生一:由张小平离职引发的一些吐槽