Python 使用utf8读取行。使用utf8编码

Python 使用utf8读取行。使用utf8编码,python,unicode,utf-8,Python,Unicode,Utf 8,我从如下文件中读取行: 小大事记:163韦格·祖尔·斯皮岑莱斯顿·邓·勒本德语版彼得斯,汤姆 卡塔斯多夫:那么,你的球队是谁 斯皮策莱东德语版托马斯,加里 我用以下代码读取/编码它们: title = line.encode('utf8') 但结果是: b'Die virtuelle Katastrophe:那么f\xc3\xbchren Sie Teams\xc3\xbcber 德文版托马斯,加里' 大人物:163韦格·祖尔·斯皮岑莱东·邓·勒本 德文版彼得斯,汤姆的 为什么总是加b? 如何

我从如下文件中读取行:

小大事记:163韦格·祖尔·斯皮岑莱斯顿·邓·勒本德语版彼得斯,汤姆

卡塔斯多夫:那么,你的球队是谁 斯皮策莱东德语版托马斯,加里

我用以下代码读取/编码它们:

title = line.encode('utf8')
但结果是:

b'Die virtuelle Katastrophe:那么f\xc3\xbchren Sie Teams\xc3\xbcber 德文版托马斯,加里'

大人物:163韦格·祖尔·斯皮岑莱东·邓·勒本 德文版彼得斯,汤姆的

为什么总是加b? 如何正确读取文件以保留UMLAUT

以下是完整的相关代码片段:

# Parse the clippings.txt file
lines = [line.strip() for line in codecs.open(config['CLIPPINGS_FILE'], 'r', 'utf-8-sig')]
for line in lines:
    line_count = line_count + 1
    if (line_count == 1 or is_title == 1):
        # ASSERT: this is a title line
        #title = line.encode('ascii', 'ignore')
        title = line.encode('utf8')
        prev_title = 1
        is_title = 0
        note_type_result = note_type = l = l_result = location = ""
        continue
谢谢

str.encode方法将unicode字符串转换为字节对象:

str.encodencoding=utf-8,错误=strict 以字节对象的形式返回字符串的编码版本。默认编码为“utf-8”。可以给错误设置不同的错误处理方案。错误的默认值为“strict”,这意味着编码错误会引发UnicodeError。其他可能的值包括“忽略”、“替换”、“xmlcharrefreplace”、“反斜杠替换”和通过编解码器注册的任何其他名称。register\u错误,请参阅错误处理程序一节。有关可能的编码列表,请参阅标准编码一节

所以你得到的正是你所期望的

在大多数机器上,您只需打开文件并读取即可。如果文件编码不是系统默认值,则可以将其作为关键字参数传递:

with open(filename, encoding='utf8') as f:
    line = f.readline()
方法str.encode将unicode字符串转换为字节对象:

str.encodencoding=utf-8,错误=strict 以字节对象的形式返回字符串的编码版本。默认编码为“utf-8”。可以给错误设置不同的错误处理方案。错误的默认值为“strict”,这意味着编码错误会引发UnicodeError。其他可能的值包括“忽略”、“替换”、“xmlcharrefreplace”、“反斜杠替换”和通过编解码器注册的任何其他名称。register\u错误,请参阅错误处理程序一节。有关可能的编码列表,请参阅标准编码一节

所以你得到的正是你所期望的

在大多数机器上,您只需打开文件并读取即可。如果文件编码不是系统默认值,则可以将其作为关键字参数传递:

with open(filename, encoding='utf8') as f:
    line = f.readline()

b表示您得到的是一个字节缓冲区,而不是编码所期望的unicode字符串,后者将字符串转换为编码的字节序列。在您的情况下,您需要从utf-8解码,而不是编码到utf-8。或者更好,使用。为了得到正确的答案,我希望看到您的更多代码。@dhke删除它就足够了。请对行进行编码,因为输出看起来像正确的UTF-8,这意味着行已经是一个有效的Unicode字符串。@f0rd42我明白了。看一下代码片段,您应该能够完全删除编码部分。此时,该行已经是一个解码的Python字符串\xc3\xb'也是德语的正确utf-8。你怎么会想,这些字母读错了?它们在输出时是否显示不正确?@melpomenattributeerror:“str”对象没有属性“decode”;-。这是Python3,Python3字符串没有解码,因为它已经被解码了。我将代码视为满足我需求的基础。多亏了你,这意味着你得到了一个字节缓冲区,而不是一个unicode字符串,这是预期的编码,它将字符串转换成编码字节序列。在您的情况下,您需要从utf-8解码,而不是编码到utf-8。或者更好,使用。为了得到正确的答案,我希望看到您的更多代码。@dhke删除它就足够了。请对行进行编码,因为输出看起来像正确的UTF-8,这意味着行已经是一个有效的Unicode字符串。@f0rd42我明白了。看一下代码片段,您应该能够完全删除编码部分。此时,该行已经是一个解码的Python字符串\xc3\xb'也是德语的正确utf-8。你怎么会想,这些字母读错了?它们在输出时是否显示不正确?@melpomenattributeerror:“str”对象没有属性“decode”;-。这是Python3,Python3字符串没有解码,因为它已经被解码了。我将代码视为满足我需求的基础。谢谢你们两位