哪种编码方法最可靠?

2024-04-24 14:58:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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的替换就不起作用了…在


Tags: txt编码aswithopenutfencodef2
1条回答
网友
1楼 · 发布于 2024-04-24 14:58:23

一般来说,您通常希望尽早解码已编码的字符串,然后将其作为unicode对象进行操作,最后尽可能晚地对其进行编码(例如在将其写入文件之前)。在

例如:

with codecs.open("testcodec.txt", "r","utf-8") as f3:
    s = f3.read()

# modify s here

with codecs.open("testcodec.txt", "w","utf-8") as f3:
    f3.write(s)

至于你的问题,哪种方式是最好的:我认为使用编解码器库和手动编码/解码没有区别。这是一个偏好的问题,两者都能奏效。在

简单地使用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字符串。在

相关问题 更多 >