【转载】python 编码问题 u'汉字'
转自 白灰 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'汉字'相关推荐
- [转载] python 遍历字符串 字符_python 遍历字符串(含汉字)实例详解
参考链接: Python字符串| rfind python 遍历字符串(含汉字)实例详解 python 遍历字符串(含汉字)实例详解 s = "中国china" for j in ...
- python将汉字转为拼音字母_科学网—[转载]python中文汉字转拼音 - 陈明杰的博文...
将汉字转为拼音.可以用于汉字注音.排序.检索(Russian translation) . 特性根据词组智能匹配最正确的拼音. 支持多音字. 简单的繁体支持, 注音支持. 支持多种不同拼音/注音风格. ...
- Python爬虫笔记——Url解码时,如何将汉字转化为以 %开头的 gb2312 编码 和 将以%号开头的编码转化为汉字 的示例
参考的链接: Url解码时,如何将汉字转化为以 %开头的 gb2312 编码 Python标准库urllib中parse.quote() Python之quote()使用 python之urlenco ...
- python编码终极版
**转载网址**:https://www.cnblogs.com/575dsj/p/7112767.html py编码终极版 说起python编码,真是句句心酸.算起来,反复折腾两个来月了.万幸的是, ...
- Python编码---转自金角大王
本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有 ...
- python 编码文件json.loads json.dumps
python 编码文件json.loads json.dumps import yaml d = {'name': '张三', 'age': '1'} print d jd = json.dumps( ...
- Python 编码风格参考
2019独角兽企业重金招聘Python工程师标准>>> 代码除了用来运行外,更多的是用来读.为了是代码的可读性更强,很多编程语言都有自己的编码规范.规范的制定是为了保持代码的一致性, ...
- python 处理python编码的基本过程
概括.从python1.6开始就可以处理unicode字符了. 出处:http://developer.51cto.com/art/201012/241226.htm 一.几种常见的编码格式. 1.1 ...
- python编码和解码_Python中的编码与解码(转)
Python中的字符编码与解码困扰了我很久了,一直没有认真整理过,这次下静下心来整理了一下我对方面知识的理解. 文章中对有些知识没有做深入的探讨,一是我自己也没有去深入的了解,例如各种编码方案的实现方 ...
最新文章
- 推导和实现:全面解析高斯过程中的函数最优化(附代码公式)
- 针对 AlloyFinger 中 currentTarget为空的解决方案
- poj3723Conscription
- Android service 小研究
- 白鹭php源码,白鹭/CDNDrive
- 实习三个月的地一个完整项目总结
- [APK签名] .pk8、.x509.pem转化为.keystore签名
- 网站 smtp服务器,网站smtp服务器
- 解密常见的社会工程学攻击
- SPSS入门教程—如何绘制高低图
- python实现微信自动回复
- 轻松搞定iOS自动化环境搭建
- 向量法计算体积的思路(没有代码了)
- 计算机主机电源键,按电脑主机机箱电源键后,却没有任何反应疑难问题
- 文件服务器 tmp文件夹,Linux管理临时文件tmpfiles
- Zrlog开源博客网站 安装教程
- Float32Array基础用法
- Python常见习题
- IMF: Interactive Multimodal Fusion Model for Link Prediction
- 做Web自动化前,你必会的几个技能