最近碰了很多钉子。。。

不得不说,python2.6相较于之前发布的版本,就编码方面来说,有明显的进步。本机使用的是python2.6,同样的代码根本没有遇到问题。到了服务器上部署时,一台服务器的python2.5和另一台服务器的python2.4,都折磨得我苦不堪言。

先厘清几个概念:python内置的字符类型是unicode,当需要进行编码转换时,都要先转成unicode,然后再转换成目标编码。而str类型是二进制类型,例如

声明变量uniStr=u'的',uniStr的类型为Unicode

执行gbStr=uniStr.encode('gb2312'),则gbStr的类型为str,长度为18字节(gb2312标准里用两个字节表示一个汉字)。

若执行gbStr.encode('gb2312'),则会报错,因为'ascii' codec can't decode byte 0xd3 in position 0: ordinal not in range(128)。

关于unicode:unicode可以想象成一个比ascii大得多的码表,能够包含所有现存字符。每个字符有一个对应的编码,编码的范围是0到0x10ffff,那么我们可以使用32位的int来储存一个unicode字符。但这样比较浪费空间,人们就提出了别的编码方案,例如utf-8。简而言之,编码方案就是把unicode值映射成字节流,术语是encoding。

python默认的编码方案是ascii,所有超过128的unicode编码都会报UnicodeEncodeError。

utf-8方案编码方案是应用较广的一种,编码规则如下:

unicode编码值小于128,原封不动;

unicode编码值在128到7ff,将转换为2个字节,每字节值范围在128到255之间;

unicode编码值大于7ff的,将转换为3-4个字节,每字节值范围在128到255之间。

为了应付编码问题,可以用repr()函数,type()函数来一探究竟。type能够告诉你这是unicode还是str,如果通过repr看到形如u'\ua000'的串,一般就是unicode了。\u和\U的区别是一个用4位16进制数表示,一个是8位16进制数表示。ord()函数可以返回一个unicode字并返回它的unicode编码(还记得上面提到的那张大码表吗?这编码就是在表中的索引值)。

中文python笔记_python 中文编码笔记相关推荐

  1. 中文python笔记_Python学习笔记-基础篇

    安装 Linux Linux已经自带Python了,我的Centos7自带Python2.7.4,我通过源码安装来更新版本. #!/bin/bash #源码安装 wget https://www.py ...

  2. python middle()_Python自学笔记(七):函数

    写在前面: 在两个电脑上编辑总是莫名其妙丢失内容,发现前面的笔记有丢失的部分,又回去补充了. 记到函数这一部分,书中案例会不断使用前面所学,所以会发现笔记有不完善的地方,以及在学习过程产生的疑问,会自 ...

  3. python用法查询笔记_Python学习笔记 - 2 - PyCharm的基本使用

    什么是IDE 开始学习的小白同学,一看到这三个字母应该是懵逼的,那么我们一点一点来说. 既然学习Python语言我们就需要写代码,那么代码写在哪里呢?在记事本里写 在word文档里写 在sublime ...

  4. python课程笔记_Python课程笔记(一)

    由于新冠状病毒的爆发,不得不在家里上网课,开课已经两个礼拜了,今天上完Python课后,准备整理一下最近学习Python的笔记. 人生苦短,我用Python 一.Hello World 初学一门新的语 ...

  5. pca降维python实例_Python机器学习笔记:使用scikit-learn工具进行PCA降维

    之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-learn工具来进行PCA降维. 在数据处理中,经常会遇到特征维度比样本数量多得多 ...

  6. python中文字体奇怪_python中文编码(汉字乱码问题解决方案)

    Python脚本对英语字母是非常友好的,但对中文就不是了.我们用 Python 输出 "Hello, how are you!",英文没有问题,但是如果你输出中文字符 " ...

  7. python初学篇笔记_Python学习笔记(基础篇)

    Python 基础 输入输出 输出 使用print()可以向屏幕上输出指定的文字: >>> print('Hello world!') Hello world! print()中可以 ...

  8. c语言对中文字符串编码_Python || 学习笔记(1):数据类型字符串变量和编码

    数据类型 特性: 对于0很多的整数,python允许用_对0进行分离10_000_000_000就等同于10000000000 16进制用0x开头进行表示 对于很大或很小的浮点数必须使用科学计数法表示 ...

  9. 大学python笔记_Python 上手笔记

    要是想在键盘上体验一下, 安装Python也很简单: 基本的编译环境应该已经包括了Python,但Mac系统最好在上面这个网站下载安装.在Linux系统中可以使用apt-get等工具来安装更新.另外假 ...

最新文章

  1. 在长沙怎么挑选装饰公司
  2. word插入公式快捷键_用WORD写论文时好用到哭的技巧-插入公式
  3. 关于创业公司产品开发原则
  4. 【NLP】图解 BERT 预训练模型!
  5. Vue第二章,在项目中使用element-ui组件
  6. NET问答: 如何将 DataTable 转成 IEnumerableT ?
  7. 谈谈Circuit Breaker在.NET Core中的简单应用
  8. 【渝粤教育】 国家开放大学2020年春季 1167环境水利学 参考试题
  9. ESS控制台发布新功能:创建多实例规格的伸缩配置
  10. 在IntelliJ IDEA里配置Go开发环境
  11. PDA连接远程SQL 2005数据库
  12. 技术再好,能阻止暴力视频的疯传吗?
  13. 海量存储——致性和高可用专题
  14. python 如果你的年龄大于18_02Python基础
  15. Jmeter小程序压力测试案例
  16. linux iso转换成img文件,Ubuntu下将img 转化成iso的号令[Linux安全]
  17. 【寻找最佳小程序】01期:影视评分小工具“豆瓣评分”——产品设计要点及专家评析
  18. poi怎么设置某个单元格为下拉框_java excel 多选下拉列表设置
  19. 一键下载网页所有图片,把美丽存下来
  20. NOSQL之Neo4j:Neo4j的简介、安装、使用方法(Neo4j搭配JDK安装的图文教程)之详细攻略

热门文章

  1. 洛谷P1067 多项式输出
  2. Apache网站服务
  3. Android junit单元测试
  4. netty客户端源码
  5. sql server 游标的使用方法
  6. iOS - Masonry自动布局
  7. frame或者iframe的contentwindow属性
  8. 【剑指offer】面试题12:矩阵中的路径(Java)
  9. Leetcode--80. 删除排序数组中的重复项Ⅱ
  10. java中的foreach