转自  白灰  http://www.cnblogs.com/baihuitestsoftware/articles/5230351.html

中文编码问题是用中文的程序员经常头大的问题,在python下也是如此,那么应该怎么理解和解决python的编码问题呢?

python内部使用的是unicode编码,而外部却要面对千奇百怪的各种编码,比如作为中国程序经常要面对的gbk,gb2312,utf8等,那这些编码是怎么转换成内部的unicode呢?

首先我们先看一下源代码文件中使用字符串的情况。源代码文件作为文本文件就必然是以某种编码形式存储代码的,python默认会认为源代码文件是asci编码,比如说代码中有一个变量赋值:

s1=’a’ 
print s1

python认为这个’a'就是一个asci编码的字符。在仅仅使用英文字符的情况下一切正常,但是如果用了中文,比如:

s1=’哈’ 
print s1

这个代码文件被执行时就会出错,就是编码出了问题。python默认将代码文件内容当作asci编码处理,但asci编码中不存在中文,因此抛出异常。

解决问题之道就是要让python知道文件中使用的是什么编码形式,对于中文,可以用的常见编码有utf-8,gbk和gb2312等。只需在代码文件的最前端添加如下:

# -*- coding: utf-8 -*-

这就是告知python我这个文件里的文本是用utf-8编码的,这样,python就会依照utf-8的编码形式解读其中的字符,然后转换成unicode编码内部处理使用。

不过,如果你在Windows控制台下运行此代码的话,虽然程序是执行了,但屏幕上打印出的却不是哈字。这是由于python编码与控制台编码的不一致造成的。Windows下控制台中的编码使用的

是gbk,而在代码中使用的utf-8,python按照utf-8编码打印到gbk编码的控制台下自然就会不一致而不能打印出正确的汉字。

解决办法一个是将源代码的编码也改成gbk,也就是代码第一行改成:

# -*- coding: gbk -*-

另一种方法是保持源码文件的utf-8不变,而是在’哈’前面加个u字,也就是:

s1=u’哈’ 
print s1

这样就可以正确打印出’哈’字了。

这里的这个u表示将后面跟的字符串以unicode格式存储。python会根据代码第一行标称的utf-8编码识别代码中的汉字’哈’,然后转换成unicode对象。如果我们用type查看一下’哈’的数据类型type(‘哈’),会得到<type ‘str’>,而type(u’哈’),则会得到<type ‘unicode’>,也就是在字符前面加u就表明这是一个unicode对象,这个字会以unicode格式存在于内存中,而如果不加u,表明这仅仅是一个使用某种编码的字符串,编码格式取决于python对源码文件编码的识别,这里就是utf-8。

Python在向控制台输出unicode对象的时候会自动根据输出环境的编码进行转换,但如果输出的不是unicode对象而是普通字符串,则会直接按照字符串的编码输出字符串,从而出现上面的现象。

使用unicode对象的话,除了这样使用u标记,还可以使用unicode类以及字符串的encode和decode方法。

unicode类的构造函数接受一个字符串参数和一个编码参数,将字符串封装为一个unicode,比如在这里,由于我们用的是utf-8编码,所以unicode中的编码参数使用’utf-8′将字符封装为

unicode对象,然后正确输出到控制台:

s1=unicode(‘哈’, ‘utf-8′) 
print s1

另外,用decode函数也可以将一个普通字符串转换为unicode对象。很多人都搞不明白python字符串的decode和encode函数都是什么意思。这里简要说明一下。

decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象,比如在这里我们代码用的是utf-8,那么把一个字符串转换为unicode就是如下形式:

s2=’哈’.decode(‘utf-8′)

这时,s2就是一个存储了’哈’字的unicode对象,其实就和unicode(‘哈’, ‘utf-8′)以及u’哈’是相同的。

那么encode正好就是相反的功能,是将一个unicode对象转换为参数中编码格式的普通字符,比如下面代码:

s3=unicode(‘哈’, ‘utf-8′).encode(‘utf-8′)

s3现在又变回了utf-8的’哈’。

转载于:https://www.cnblogs.com/my871208586/p/8481874.html

【转载】python 编码问题 u'汉字'相关推荐

  1. [转载] python 遍历字符串 字符_python 遍历字符串(含汉字)实例详解

    参考链接: Python字符串| rfind python 遍历字符串(含汉字)实例详解 python 遍历字符串(含汉字)实例详解 s = "中国china" for j in ...

  2. python将汉字转为拼音字母_科学网—[转载]python中文汉字转拼音 - 陈明杰的博文...

    将汉字转为拼音.可以用于汉字注音.排序.检索(Russian translation) . 特性根据词组智能匹配最正确的拼音. 支持多音字. 简单的繁体支持, 注音支持. 支持多种不同拼音/注音风格. ...

  3. Python爬虫笔记——Url解码时,如何将汉字转化为以 %开头的 gb2312 编码 和 将以%号开头的编码转化为汉字 的示例

    参考的链接: Url解码时,如何将汉字转化为以 %开头的 gb2312 编码 Python标准库urllib中parse.quote() Python之quote()使用 python之urlenco ...

  4. python编码终极版

    **转载网址**:https://www.cnblogs.com/575dsj/p/7112767.html py编码终极版 说起python编码,真是句句心酸.算起来,反复折腾两个来月了.万幸的是, ...

  5. Python编码---转自金角大王

    本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有 ...

  6. python 编码文件json.loads json.dumps

    python 编码文件json.loads json.dumps import yaml d = {'name': '张三', 'age': '1'} print d jd = json.dumps( ...

  7. Python 编码风格参考

    2019独角兽企业重金招聘Python工程师标准>>> 代码除了用来运行外,更多的是用来读.为了是代码的可读性更强,很多编程语言都有自己的编码规范.规范的制定是为了保持代码的一致性, ...

  8. python 处理python编码的基本过程

    概括.从python1.6开始就可以处理unicode字符了. 出处:http://developer.51cto.com/art/201012/241226.htm 一.几种常见的编码格式. 1.1 ...

  9. python编码和解码_Python中的编码与解码(转)

    Python中的字符编码与解码困扰了我很久了,一直没有认真整理过,这次下静下心来整理了一下我对方面知识的理解. 文章中对有些知识没有做深入的探讨,一是我自己也没有去深入的了解,例如各种编码方案的实现方 ...

最新文章

  1. 推导和实现:全面解析高斯过程中的函数最优化(附代码公式)
  2. 针对 AlloyFinger 中 currentTarget为空的解决方案
  3. poj3723Conscription
  4. Android service 小研究
  5. 白鹭php源码,白鹭/CDNDrive
  6. 实习三个月的地一个完整项目总结
  7. [APK签名] .pk8、.x509.pem转化为.keystore签名
  8. 网站 smtp服务器,网站smtp服务器
  9. 解密常见的社会工程学攻击
  10. SPSS入门教程—如何绘制高低图
  11. python实现微信自动回复
  12. 轻松搞定iOS自动化环境搭建
  13. 向量法计算体积的思路(没有代码了)
  14. 计算机主机电源键,按电脑主机机箱电源键后,却没有任何反应疑难问题
  15. 文件服务器 tmp文件夹,Linux管理临时文件tmpfiles
  16. Zrlog开源博客网站 安装教程
  17. Float32Array基础用法
  18. Python常见习题
  19. IMF: Interactive Multimodal Fusion Model for Link Prediction
  20. 做Web自动化前,你必会的几个技能

热门文章

  1. 鲍姆-韦尔奇算法 数学推导
  2. streamsets rest api 转换 graphql
  3. Java程序员应知道的十条Java优化策略,让你的系统健步如飞
  4. Tomcat相关目录及配置文件总结
  5. 基于遗传算法实现自动组卷
  6. Goldengate介绍
  7. Android RotateAnimation详解
  8. myeclispe快捷键一\(≧▽≦)/终于也收藏了
  9. android studio 快速删除无用的import包
  10. OpenCV常见的优化方法和技巧总结