Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的Unicode问题_Python_Unicode - Fatal编程技术网

Python中的Unicode问题

Python中的Unicode问题,python,unicode,Python,Unicode,我有一个奇怪的问题。我的一个朋友给我发了一个文本文件。如果复制/粘贴文本,然后将其粘贴到文本编辑器中并保存,则以下代码有效。如果选择直接从浏览器保存文件的选项,则以下代码将中断。发生什么事?保存无效字符是浏览器的错吗 这是一个示例行 当我保存它时,该行显示 什么�发生什么事了 当我复制/粘贴它时,该行显示 发生什么事了 代码如下: import codecs def do_stuff(filename): with codecs.open(filename, encoding='utf

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

这是一个示例行

当我保存它时,该行显示

什么�发生什么事了

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

发生什么事了

代码如下:

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

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

问题是,运行程序的人将从各种来源手动保存文件,我无法控制编码是什么。我以为几乎所有的东西都是utf-8,但显然我错了。对他来说,这只是“文本”,无法理解编码。为了避免这种情况发生,我需要在代码中更改什么?
codecs.open(filename, encoding='utf-8', errors='ignore') as f: