我对python相当陌生,但由于我的母语包含一些讨厌的元音变音,我不得不陷入一个噩梦,即编码是正确的开始。 我阅读了joelonsoftware关于编码的文章,理解了代码点和字母的实际呈现之间的区别(以及unicode和编码之间的联系)。 为了让我摆脱困境,我找到了三种处理元音变音的方法,但是我不能决定,哪一种适合什么情况。 如果有人能照亮它?我希望能够将文本写入文件,从中读取(或sqlite3)并给出文本,所有这些都包括可读的元音变音。。。 谢谢!在
# -*- coding: utf-8 -*-
import codecs
# using just u + string
with open("testutf8.txt", "w") as f:
f.write(u"Österreichs Kapitän")
with open("testutf8.txt", "r") as f:
print f.read()
# using encode/decode
s = u'Österreichs Kapitän'
sutf8 = s.encode('UTF-8')
with open('encode_utf-8.txt', 'w') as f2:
f2.write(sutf8)
with open('encode_utf-8.txt','r') as f2:
print f2.read().decode('UTF-8')
# using codec
with codecs.open("testcodec.txt", "w","utf-8") as f3:
f3.write(u"Österreichs Kapitän")
with codecs.open("testcodec.txt", "r","utf-8") as f3:
print f3.read()
编辑: 我测试了这个(文件的内容是“収sterreichs Kapitän”):
^{pr2}$我是否必须在代码中到处使用u'string'(unicode)?我发现,如果我只使用空白字符串(没有‘U’’),UMLUUT的替换就不起作用了…在
一般来说,您通常希望尽早解码已编码的字符串,然后将其作为unicode对象进行操作,最后尽可能晚地对其进行编码(例如在将其写入文件之前)。在
例如:
至于你的问题,哪种方式是最好的:我认为使用编解码器库和手动编码/解码没有区别。这是一个偏好的问题,两者都能奏效。在
简单地使用open(如第一个示例中所示)并不起作用,因为python将尝试使用默认的编解码器(如果不更改的话,就是ASCII)对字符串进行编码。在
关于是否应该在任何地方都使用unicode字符串的问题: 原则上,是的。如果创建一个字符串
s = 'asdf'
,它的类型是str
(可以用type(s)
来检查),如果创建s2 = u'asdf'
,它的类型是unicode
。 由于总是操作unicode对象更好,所以建议使用后者。在如果您不想总是在字符串前面附加“u”,可以使用以下导入:
^{pr2}$然后你可以做
s = 'asdf'
,s的类型是unicode
。在Python3中,这是默认值,因此只需要在Python2中导入。在对于潜在的陷阱,您可以看看Any gotchas using unicode_literals in Python 2.6?。基本上,您不想混合使用utf-8编码的字符串和unicode字符串。在
相关问题 更多 >
编程相关推荐