2012-07-12 65 views
1

我不能得到关于Python如何在文件处理Unicode一握...Python中的Unicode文件中

f = open('test.txt', 'w') 
f.write('abc') 
f.close() 

这给了3个字节的文件。

f = open('test.txt', 'w') 
f.write('abcé') 
f.close() 

这给了5个字节的文件(é占据两个字节,但Python是怎样知道它必须有读2个字节?)

f = open('test.txt', 'w') 
f.write('abcそ') # a Japanese character 
f.close() 

这给出了6个字节的文件(そ需要三个字节,但Python如何知道它必须读取3个字节?)

所以我可以理解,Unicode需要两个字节,但它有时是1或2或3字节,我看不见怎么运行的。

+1

http://en.wikipedia.org/wiki/Variable-length_code ,http://en.wikipedia.org/wiki/UTF-8 – 2012-07-12 19:56:04

+2

我不知道为什么这很重要,但这不是一个中国字。 – quantum 2012-07-12 19:56:12

+0

oops ...你说得对,它是日文,改变了评论... – Paul 2012-07-12 19:59:37

回答

4

默认情况下,它将输出文件编码为UTF-8,它是一种可变长度编码:它使用1字节编码ASCII字符(编码点U + 0000-U + 007F),编码点U + 0080使用2个字节的U + 07FF(其中包括拉丁-1字符,如é),使用3个字节的代码点U + 0800-U + FFFF(包括中文和日文字符,如そ),代码点U + 10000- U + 10FFFF使用4个字节。

如果要使用不同的编码,如UTF-16,可以使用str.encode使用所需的编码:

# Save the string as UTF-16 little-endian 
f = open('test.txt', 'w') 
f.write(u'abcそ'.encode('utf-16le') # Output will be 8 bytes 
f.close() 
+0

谢谢,文档http:// docs .python.org/tutorial/inputoutput.html没有提到写入默认为utf-8,但是这解释了这一切。 – Paul 2012-07-12 20:04:18

+1

写的不是什么,而是解释器如何解释你的代码:你的代码很可能被你的编辑器以UTF-8保存到磁盘,所以当解释器读取它时,它会看到一个UTF-8字符串文字,这就是传递给文件的内容。 – 2012-07-12 20:11:53

+0

这是我使用的Python解释器,所以默认为UTF-8,再次thanx! – Paul 2012-07-12 20:19:09