python中新手会迷茫的编码问题

     python的编码问题,我这里只是说说unicode和str的关系。其他的详情看http://www.cnblogs.com/huxi/articles/1897271.html。讲得很好。

    在python2.x中的编码问题

1.str 和unicode

str和unicode都是basestring的子类。严格意义上说,str其实是字节串,它是unicode经过编码后的字节组成的序列  ,unicode才是真正意义上的字符串。

  注意点:对unicode进行decode解码是错误的,对str进行encode编码是错误的。使用type()查看,unicode进行decode就是str。str进行encode就是unicode.

u=u'我'
# 对unicode进行解码是错误的
# s2 = u.decode('UTF-8')
# 同样,对str进行编码也是错误的
# u2 = s.encode('UTF-8')

2.读写文件

内置的open()方法打开文件时,read()读取的是str,读取后需要使用正确的编码格式进行decode()。write()写入时,如果参数是unicode,则需要使用你希望写入的编码进行encode(),如果是其他编码格式的str,则需要先用该str的编码进行decode(),转成unicode后再使用写入的编码进行encode()。如果直接将unicode作为参数传入write()方法,Python将先使用源代码文件声明的字符编码进行编码然后写入。

# coding: UTF-8
 
f = open('test.txt')
s = f.read()
f.close()
print type(s) # <type 'str'>
# 已知是GBK编码,解码成unicode
u = s.decode('GBK')
 
f = open('test.txt', 'w')
# 编码成UTF-8编码的str
s = u.encode('UTF-8')
f.write(s)

3.总结

总的来说:

1.str进行encode进行解码就是unicode。 unicode进行encode编码就是str。

2.str 可以有很多种类型的,比如GBK型的,UTF-8型的等。

3.打开文件,f.read()读出来是str类型。写入可以是unicode型

4.从一个类型读出转换成另一个类型的输入,需要经过decode(),再encode()。比如读出一个GBK文本,写入格式为UTF-8

读出str,通过str.decode(‘GBK’)解码成unicode。unicode进行u.encode('UTF-8')编码。再写入文件。可以通过file命令查看文件是什么类型的编码。

扩展:

isinstance(s, str) 用来判断是否为一般字符串 
isinstance(s, unicode) 用来判断是否为unicode



你可能感兴趣的:(unicode,python,编码)