如何在使用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: