如何在使用python3的文件中打印非ASCII字符?

问题描述:

这是我的代码的一个例子。这很简单,你会看到。当我用它来从一个Ubuntu终端窗口打印一个文件,我得到了以下错误消息:如何在使用python3的文件中打印非ASCII字符?

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 

代码:

#!/usr/bin/python3 

import sys 

def contains_only_ascii(a_string): 
    try: 
     for a_char in a_string.strip(): 
      if ord(a_char) < 32 or ord(a_char) > 126: 
       return False 
    except: 
     pass 
    return True 

def print_file_in_ascii(fname): 
    with open(fname, "r") as f: 
     for line in f: 
      if contains_only_ascii(line) == True: 
       print(line, end="") 

# sys.argv may be multiple files when a * is using for a filename; globbing 
for f in sys.argv[1:]: 
    print_file_in_ascii(f) 

你已经默认编码,这对打开的文件你的系统是utf-8。该文件不以UTF-8编码,因此读取该文件会产生异常。

打开通过显式指定encoding=参数在正确的编码文件:

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