Python再次出现Unicode问题

时间:2014-01-30 01:37:08

标签: python unicode

我有一个奇怪的问题。我的一个朋友给我发了一个文本文件。如果我复制/粘贴文本然后将其粘贴到我的文本编辑器中并保存,则以下代码可以正常工作。如果我选择直接从浏览器保存文件的选项,则以下代码会中断。这是怎么回事?保存无效字符是浏览器的错误吗?

这是一个示例行。

当我保存时,该行说

  

发生了什么事?

当我复制/粘贴它时,该行显示

  

发生了什么事?

这是代码:

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:

1 个答案:

答案 0 :(得分:1)

浏览器的“面向文件”部分使用原始字节,而不是字符。页面使用的特定编码应在HTTP标头或HTML本身中指定。您必须使用此编码,而不是假设您拥有UTF-8数据。