str.decode : other encoding -> utf16
str.encode : utf16 -> other encoding
2. 文件编码与字符串在内存中的表示形式
文件编码同字符串在内存中的编码相同。例如:,程序运行后,结果如下:
1 #coding:utf8
2
3 u1 = '你好'.decode('gbk')
4 u2 = '你好'.decode('utf8')
5 print u1
6 print u2
文件编码为 utf8
浣犲ソ你好
注意:
1. 文件时utf8编码;
2. u1以gbk解码,结果是乱码;
3. 而u2是以utf8解码,结果正确。
3. 强大的codecs模块
codecs是encoders和decoders的缩写。
这个模块的强大之处在于它提供了流的方式来处理字符串编码,当处理的数据很多时,这种方式很有用。
你可以使用IncrementalEncoder和IncrementalDecoder,但是强烈建议使用StreamReader和StreamWriter,因为使用它们会大大简化你的代码。
例如,有一个test.txt的文件,它的编码为gbk,现在我需要将它的编码转换为utf8,可以编写如下代码:
1 #coding:utf8
2 import codecs
3
4 # 打开文件
5 fin = open('test.txt', 'r')
6 fout = open('utf8.txt', 'w')
7
8 # 获取 StreamReader
9 reader = codecs.getreader('gbk')(fin)
10 # 获取 StreamWriter
11 writer = codecs.getwriter('utf8')(fout)
12
13 din = reader.read(10)
14 while din:
15 writer.write(din)
16 din = reader.read(10)