我有一个奇怪的问题。我的一个朋友给我发了一个文本文件。如果我复制/粘贴文本然后将其粘贴到我的文本编辑器中并保存,则以下代码可以正常工作。如果我选择直接从浏览器保存文件的选项,则以下代码会中断。这是怎么回事?保存无效字符是浏览器的错误吗?
这是一个示例行。
当我保存时,该行说
发生了什么事?
当我复制/粘贴它时,该行显示
发生了什么事?
这是代码:
import codecs
def do_stuff(filename):
with codecs.open(filename, encoding='utf-8') as f:
def process_line(line):
return line.strip()
lines = f.readlines()
for line in lines:
line = process_line(line)
print line
do_stuff('stuff.txt')
这是我得到的追溯:
Traceback (most recent call last):
File "test-encoding.py", line 13, in <module>
do_stuff('stuff.txt')
File "test-encoding.py", line 8, in do_stuff
lines = f.readlines()
File "/home/somebody/.python/lib64/python2.7/codecs.py", line 679, in readlines
return self.reader.readlines(sizehint)
File "/home/somebody/.python/lib64/python2.7/codecs.py", line 588, in readlines
data = self.read()
File "/home/somebody/.python/lib64/python2.7/codecs.py", line 477, in read
newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 4: invalid start byte
在这种情况下我该怎么办?
如果我不知道运行它的用户使用什么编码,我该如何分发脚本?
固定
codecs.open(filename, encoding='utf-8', errors='ignore') as f:
答案 0 :(得分:1)
浏览器的“面向文件”部分使用原始字节,而不是字符。页面使用的特定编码应在HTTP标头或HTML本身中指定。您必须使用此编码,而不是假设您拥有UTF-8数据。