Python 3.x 如何使用python3在文件中打印非ASCII字符?

Python 3.x 如何使用python3在文件中打印非ASCII字符?,python-3.x,unicode,Python 3.x,Unicode,下面是我的代码示例。正如您将看到的,它非常简单。当我使用它从Ubuntu终端窗口打印文件时,我收到以下错误消息: Traceback (most recent call last): File "/ascii_cat", line 22, in <module> print_file_in_ascii(f) File "/ascii_cat", line 16, in print_file_in_ascii for line in f: File "/us

下面是我的代码示例。正如您将看到的,它非常简单。当我使用它从Ubuntu终端窗口打印文件时,我收到以下错误消息:

Traceback (most recent call last):
  File "/ascii_cat", line 22, in <module>
    print_file_in_ascii(f)
  File "/ascii_cat", line 16, in print_file_in_ascii
    for line in f:
  File "/usr/lib/python3.4/codecs.py", line 319, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
回溯(最近一次呼叫最后一次):
文件“/ascii_cat”,第22行,在
以ascii(f)格式打印文件
文件“/ascii\u cat”,第16行,以ascii格式打印文件
对于f中的行:
文件“/usr/lib/python3.4/codecs.py”,第319行,解码中
(结果,消耗)=自身缓冲区解码(数据,自身错误,最终)
UnicodeDecodeError:“utf-8”编解码器无法解码位置1中的字节0x8b:无效的开始字节
代码:

#/usr/bin/python3
导入系统
def仅包含ascii(字符串):
尝试:
对于\u string.strip()中的\u字符:
如果ord(字符)<32或ord(字符)>126:
返回错误
除:
通过
返回真值
def打印ascii格式的文件(fname):
以开放式(fname,“r”)作为f:
对于f中的行:
如果仅包含ascii(行)=真:
打印(第行,结束=“”)
#当*用于文件名时,sys.argv可能是多个文件;通配符
对于sys.argv[1:]中的f:
以ascii(f)格式打印文件

您已经用默认编码打开了文件,在您的系统上是
utf-8
。该文件未以UTF-8编码,因此读取该文件会产生异常

通过明确指定
encoding=
参数,以正确的编码打开文件:

with open(fname,encoding='whatever_the_encoding_really_is') as f:

您已使用默认编码打开文件,系统上的默认编码为
utf-8
。该文件未以UTF-8编码,因此读取该文件会产生异常

通过明确指定
encoding=
参数,以正确的编码打开文件:

with open(fname,encoding='whatever_the_encoding_really_is') as f: