Python 使用utf8读取行。使用utf8编码
我从如下文件中读取行: 小大事记:163韦格·祖尔·斯皮岑莱斯顿·邓·勒本德语版彼得斯,汤姆 卡塔斯多夫:那么,你的球队是谁 斯皮策莱东德语版托马斯,加里 我用以下代码读取/编码它们: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? 如何
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字符串没有解码,因为它已经被解码了。我将代码视为满足我需求的基础。谢谢你们两位