博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python字符编码
阅读量:5306 次
发布时间:2019-06-14

本文共 1884 字,大约阅读时间需要 6 分钟。

python白皮书(11)—字符编码  

1、unicode编码

世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,不但要知道它的编码方式,还要安装有对应编码表,否则就可能无法读取或出现乱码。为什么电子邮件和网页都经常会出现乱码,就是因为信息的提供者和信息的读取者使用了不同的编码方式。

  如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。这就是Unicode编码。

2、 python字符编码

pythonstr object  unicode object 两种字符串都可以存放字符的字节编码,但是他们是不同的type,这一点很重要,也是为什么会有encode decode

decodestr -------------------------> Unicode   str以某种编码转换成unicode

encodeunicode -------------------------> str   unicode转换成某种编码的str

1str_string.decode('codec') 是把str_string转换为unicode_string, codec是源str_string的编码方式;

2unicode_string.encode('codec') 是把unicode_string 转换为str_stringcodec是目标str_string的编码方式;

3str_string.decode('from_codec').encode('to_codec') 可实现不同编码的str_string之间的转换;

>>> t='长城'        #<type 'str'>

>>> t

 '\xb3\xa4\xb3\xc7'

 >>> t.decode('gb2312').encode('utf-8')

 '\xe9\x95\xbf\xe5\x9f\x8e'

编码声明

源代码文件中,如果有用到非ASCII字符,则需要在文件头部进行字符编码的声明:

#-*- coding: UTF-8 -*-

读写文件

内置的open()方法打开文件时,read()读取的是str,读取后需要使用正确的编码格式进行decode()

# coding: UTF-8

 

f = open('test.txt')

s = f.read()

f.close()

print type(s)     # <type 'str'>

 

已知是GBK编码,解码成unicode

u = s.decode('GBK')

 

编码成UTF-8编码的str

f = open('test.txt', 'w')

s = u.encode('UTF-8')

f.write(s)

f.close()

编码方法

# coding:gbk

 

import sys

import locale

 

def p(f):

    print '%s.%s(): %s' % (f.__module__, f.__name__, f())

 

返回当前系统所使用的默认字符编码

p(sys.getdefaultencoding)      # ascii

 

返回用于转换Unicode文件名至系统文件名所使用的编码

p(sys.getfilesystemencoding)    # ISO-8859-1

 

获取默认的区域设置并返回元祖(语言编码)

p(locale.getdefaultlocale)       # ('en_US', 'ISO8859-1')

 

返回用户设定的文本数据编码

p(locale.getpreferredencoding)   # ISO-8859-1

一些建议

1)使用字符编码声明,并且同一工程中的所有源代码文件使用相同的字符编码声明。这点是一定要做到的。

2)抛弃str,全部使用unicode。按引号前先按一下u最初做起来确实很不习惯而且经常会忘记再跑回去补,但如果这么做可以减少90%的编码问题。如果编码困扰不严重,可以不参考此条。

3)使用codecs.open()替代内置的open()。如果编码困扰不严重,可以不参考此条。

4)绝对需要避免使用的字符编码:MBCS/DBCSUTF-16

转载于:https://www.cnblogs.com/huj690/articles/3037144.html

你可能感兴趣的文章
Lightoj 1016 - Brush (II)
查看>>
【代码笔记】iOS-NSLog的使用
查看>>
JavaScript 函数调用
查看>>
常见的磁盘I/O和网络I/O优化技巧
查看>>
java 利用反射完成自定义注解
查看>>
【2016常州一中夏令营Day4】
查看>>
php文件下载
查看>>
(4)[wp7数据存储] WP7 IsolatedStorage系列篇--读取、保存图片文件 [复制链接]
查看>>
C#让电脑发声,播放声音
查看>>
构造函数调用和复制构造函数调用
查看>>
silverlight的timer
查看>>
关于响应式布局
查看>>
Django ViewDoesNotExist error
查看>>
amazeui.css
查看>>
nginx 的uri、request_uri 区别
查看>>
发送邮件程序报错454 Authentication failed以及POP3和SMTP简介
查看>>
Weka开发[4]-特征选择
查看>>
Jenkins远程代码执行漏洞
查看>>
BZOJ 2752: [HAOI2012]高速公路(road)( 线段树 )
查看>>
jQuery基础事件
查看>>