python的编码

1、概述

讲述编码,那么就要涉及到几个方面,包括系统中如何来显示字符,文件中如何来保存字符。

1.1 系统环境

在系统中显示字符,那么就必须要考虑到系统中使用的编码格式。

在linux系统中,可以使用如下命令来进行查看系统当前的编码格式:

[root@python pythonexample]# locale

LANG=en_US.utf-8

LC_CTYPE="en_US.utf-8"

LC_NUMERIC="en_US.utf-8"

LC_TIME="en_US.utf-8"

LC_COLLATE="en_US.utf-8"

LC_MONETARY="en_US.utf-8"

LC_MESSAGES="en_US.utf-8"

LC_PAPER="en_US.utf-8"

LC_NAME="en_US.utf-8"

LC_ADDRESS="en_US.utf-8"

LC_TELEPHONE="en_US.utf-8"

LC_MEASUREMENT="en_US.utf-8"

LC_IDENTIFICATION="en_US.utf-8"

LC_ALL=

主要的环境变量就是LANG了,一般在linux系统中,设定了LANG,那么就设定了其他的变量,在如上的显示中为en_US.utf-8,en_US表示区域的选择,一般影响的为时间的显示,显示的格式为美国时间等其他影响,而utf-8则表示字符集环境,在这里使用的是utf-8编码。

在linux系统中可以零时修改环境变量LANG的值,如下:

[root@python pythonexample]# export LANG=zh_CN.utf-8

[root@python pythonexample]# echo $LANG

zh_CN.utf-8

如果要永久生效,那么可以修改用户下的.profile文件,在其中加入上面的命令即可。

在windows环境中一般的编码为gb2312,是默认编码,是不能修改的,特别是在命令行cmd中,采用的是gb2312编码。

1.2 文件保存格式

在文件进行保存的时候,可以选择编码格式来进行保存,一般保存的格式均为utf-8编码。

在linux系统中,在vim中可以使用命令:setfileencoding=utf-8来进行保存,从而保存的格式为utf-8格式。在查看的文件保存的编码格式使用命令:set fileencoding即可看到文件的编码格式,也可以在家目录下创建文件.vimrc,在其中添加的内容如下:

set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936

从而在每次保存文件的时候,不用每次都输入命令来保存文件的格式。

在windows中,如果使用的是notepad++,那么可以在设置里面进行设置,如下:

如果要查看windows的文件的编码格式,那么在用记事本打开的时候,然后选择另存为,那么就可以看到原来的编码格式。

1.3 如何显示

unicode是一种字符集,包括所有的语言格式,而一般的字符串是ascll进行编码的,在python中通用的编码格式为utf-8,unicode可以看做是ascll码的父集合,从而unicode使包含ascll编码的。

在读出文件的时候,根据文件的编码格式,对照字符集,然后显示出来,相当于一个加密的程序,对照密码本,然后进行解码,从而得到最后的结果。

2. 在python中使用中文

通用的格式为unicode编码,从而一般在中文前面都加上一个u,这个就是unicode编码的格式了。

在使用中文的时候,必须在文件头进行声明为utf-8格式的编码,如下所示:

[root@python pythonexample]# cat unicode.py

#!/usr/bin/env python

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

在上面中,使用了coding:utf-8来进行声明,使用的是utf-8进行编码,在保存的时候,也要保存为utf-8格式。

另外,必须在中文前面添加一个u表示使用的是unicode字符集。

在linux中使用print输出中文的时候,可以使用以下的方法:

#!/usr/bin/env python

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

print u"使用unicode编码" #直接输出为unicode编码,也是可以正确显示的

print u"将unicode转变为uft-8编码".encode("utf-8") #转换为系统utf-8编码

在windows中使用print输出中文的时候,可以使用:

#!/usr/bin/python

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

print u"中文".encode("gbk")

print u"中文测试"

从上面可以看出,主要是由于环境变量的不同,从而需要转换成操作系统默认的编码格式,才能够正确的进行显示,也就是unicode编码在linux中,必须转换成系统编码格式utf-8,在windows系统中,必须将unicode编码转换为系统编码格式gbk

3、在raw_input中使用中文

在raw_input中使用中文的方式必须如下所示(linux系统中):

name = raw_input(u"中文".encode("utf-8"))

print name

必须将unicode的编码转变为系统编码,也就是必须转换成utf-8编码。

在widows系统中如下所示:

name = raw_input(u"中文输出".encode("gbk"))

print name

必须将unicode的编码转换为系统编码为gbk编码

4、读写文件时使用中文

linux:

在写入文件的时候,将字符串转换为utf-8编码,然后进行写入;在读出文件的时候,可以转码为unicode,或者是直接输出,如下:

logFile = open("kel.log","w")

logFile.writelines(u"unicode编码转换成utf-8编码写入".encode("utf-8"))

logFile.close()

readFile = open("kel.log","r")

for line in readFile:

print line.decode("utf-8")

readFile.close()

windows:

logFile = open("kel.log","w")

logFile.writelines(u"unicode编码".encode("utf-8"))

logFile.close()

readFile = open("kel.log","r")

for line in readFile:

print line.decode("utf-8")

readFile.close()

从上可以看出,在windows或者是linux系统中,只要进行对应的编码和转码,即可进行正确的显示,不会出现乱码。主要是在进行输出的时候,都是可以直接输出为unicode编码,从而都可以进行转变为utf-8编码,然后在进行转换为unicode编码即可。

5、编码转换

encode 是将unicode编码方式转换为其他的编码

decode 是将其他的编码方式转换为unicode编码

python的编码的更多相关文章

  1. python Unicode 编码解码

    1 #将Unicode转换成普通的Python字符串:"编码(encode)" 2 unicodestring = u"Hello world" 3 utf8s ...

  2. python的编码问题

    本文简单介绍了各种常用的字符编码的特点,并介绍了在python2.x中如何与编码问题作战 :) 请注意本文关于Python的内容仅适用于2.x,3.x中str和unicode有翻天覆地的变化,请查阅其 ...

  3. python 字符编码练习

    通过下面的练习,加深对python字符编码的认识 # \x00 - \xff 256个字符 >>> a = range(256)>>> b = bytes(a) # ...

  4. Python 字符编码 zz

    http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 1. 字符编码简介 1.1. ASCII ASCII(American Stan ...

  5. python 之编码问题详解

    前在一个项目中遇到用post提交一个xml,xml中含有中文,对于单独的py文件,使用urllib2.urlopen完全ok,但在django中使用就一直报编码错误,然后在网上看到这篇文章不错,决定m ...

  6. 19.python的编码问题

    在正式说明之前,先给大家一个参考资料:戳这里 文章的内容参考了这篇资料,并加以总结,为了避免我总结的不够完善,或者说出现什么错误的地方,有疑问的地方大家可以看看上面那篇文章. 以下说明是针对于pyth ...

  7. Python字符编码详解

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...

  8. 【转】Python字符编码详解

    转自:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 1. 字符编码简介 1.1. ASCII ASCII(American S ...

  9. python与编码

    Python中的文字对象 Python 3.x中处理文字的对象有str, bytes, bytearray. bytes和bytearray可以使用除了用作格式化的方法(format, format_ ...

随机推荐

  1. Android 时间戳简单转化

    时间戳就是如1377216000000 这种格式我们在mysql数据库中会经常用到把时间转换成时间戳或把时间戳转换成日期格式了,下面我来介绍安卓中时间戳操作转换方法. 一.原理 时间戳的原理是把时间格 ...

  2. 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)

    转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...

  3. SQL Server ->> 分区表上创建唯一分区索引

    今天在读<Oracle高级SQL编程>这本书的时候,在关于Oracle的全局索引的章节里面有一段讲到如果对一张分区表创建一条唯一索引,而索引本身也是分区的,那就必须把分区列也加入到索引列表 ...

  4. adobeMediaServer

    参考地址: http://www.piis.cn/news/new519.asp http://www.cuplayer.com/player/PlayerCode/RTMP/2012/0918427 ...

  5. Android gingerbread eMMC booting

    Android gingerbread eMMC booting This page is currently under construction. The content of this page ...

  6. ssh: Could not resolve hostname gitcafe.com: nodename nor servname provided, or not known

    今天 git push 的时候报如下错误: ssh: Could not resolve hostname gitcafe.com: nodename nor servname provided, o ...

  7. 基于Linux的oracle数据库管理 part5( linux启动关闭 自动启动关闭 oracle )

    主要内容 1. 数据库自动启动与关闭 数据库自动启动与关闭 - 单数据库模式 启动监听器及数据库 启动脚本: #! /bin/bash su - oracle<<EOF lsnrctl s ...

  8. Spring MVC的UrlBasedViewResolver和InternalResourceViewResolver

    Spring MVC使用ViewResolver来根据controller中返回的view名关联到具体的View对象.使用View对象来渲染返回值以生成最终的视图,如html,json或pdf等. S ...

  9. R2的版本由来

    给人一杯水,自己先有一桶水.上课.备课,那么备课中就常有一些稀奇古怪的问题. 学生问:SP2和R2是一样的吗? 老师答:不一样,一个是补丁程序,另一个是服务器操作系统. 学生不解:R2如果是操作系统, ...

  10. 总结swift 1.2适配swift2.0遇到的改变

    swift1.2适配swift2.0 以下列举的是我在项目中遇到的需要修改的,基本常见的问题就没有罗列了. 1.find函数变成了为indexOf 2.sort变成了sortInPlace 3.sor ...