写入文件时的UnicodeEncodeError

Ror*_*ory 17 python unicode beautifulsoup

我正在尝试将一些字符串写入文件(字符串已由HTML解析器BeautifulSoup提供给我).

我可以使用"print"来显示它们,但是当我使用file.write()时,我收到以下错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 6: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我怎么解析这个?

Kar*_*tel 18

是的,大约99.9%的资深Python用户以前见过它.

如果我在Google中输入'python unicode',我会得到大约1400万个结果; 第一个是http://docs.python.org/howto/unicode.html官方文件,描述了令人难以忍受的细节的整个情况; 第四个是http://farmdev.com/talks/unicode/这是一个更实用的概述,几乎可以为你提供答案,并确保你了解正在发生的事情.

你确实需要阅读和理解这些概述,不管它们看起来多久.真的没有任何解决方法.文字很难.没有"纯文本"这样的东西,多年来没有合理的传真,而且从来没有真正存在过,尽管我们花费了数十年的时间假装有.但Unicode至少是一个标准.

您还应该阅读http://www.joelonsoftware.com/articles/Unicode.html.


yos*_*ssi 14

将包含非英语字符(Unicode字符超过128)的Unicode字符串传递给需要ASCII字节字符串的字符串时,会发生此错误.Python字节串的默认编码是ASCII,"它可以处理128个(英文)字符".这就是为什么尝试将Unicode字符转换为128以上会产生错误的原因.

unicode()

unicode(string[, encoding, errors])
Run Code Online (Sandbox Code Playgroud)

构造函数具有签名unicode(string [,encoding,errors]).它的所有参数都应该是8位字符串.

第一个参数使用指定的编码转换为Unicode; 如果省略编码参数,则ASCII编码用于转换,因此大于127的字符将被视为错误

例如

s = u'La Pe\xf1a' 
print s.encode('latin-1')
Run Code Online (Sandbox Code Playgroud)

要么

write(s.encode('latin-1'))
Run Code Online (Sandbox Code Playgroud)

将使用latin-1进行编码

  • 是的,当我说"你必须这样做"时,我完全理解你还没有这样做.这就是你必须这样做的原因:解决你描述的问题.`write()`不"理解Unicode",因为(a)文件不包含字符,而是字节; (b)**有多种方法可以进行编码**并且没有特别好的方法可以代表您进行选择.嗯,实际上,它确实:它选择了最简单的编码,只处理每个人都同意的少数字符,因此如果需要任何特殊内容,就会出现错误. (2认同)

小智 2

我试过这个效果很好

with open(r"C:\rag\sampleoutput.txt", 'w', encoding="utf-8") as f:  
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

15224 次

最近记录:

8 年,12 月 前