我有一个IBM852编码的文件。我可以在使用该编码的texteditor中打开它时确认。
我想打开该文件,将其写入另一个.rtf
文本文件,然后打印出来。我试过这样,但总是收到错误:
文件“print_rawpcl.py”,第38行,在d.write(raw_data)中 文件“C:\ Python34 \ lib \ encodings \ cp1250.py”,第19行,在编码中 return codecs.charmap_encode(input,self.errors,encoding_table)[0] nicodeEncodeError:'charmap'编解码器无法对字符进行编码 522-601:字符映射到 undefined
获取此文件的正确方法是什么,将其重写在另一个文件中并通过ShellExecute将其发送到打印机?
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import time
import win32api
import win32print
import tempfile
my_encoding = "cp852"
# If there is command line argument, the first one is our file_to_print
if len(sys.argv) > 1:
file_to_print = sys.argv[1]
else:
print("No input file")
sys.exit()
try:
with open(file_to_print, "r", encoding=my_encoding) as f:
raw_data = f.read()
filename = tempfile.mktemp(".rtf")
with open(filename, "w") as d:
d.write(raw_data)
win32api.ShellExecute(
0,
"print",
filename,
'/d:"%s"' % win32print.GetDefaultPrinter(),
".",
0
)
except OSError as e:
print("Failed: {}".format(e))
print("Script ended. Everything OK!")
time.sleep(2)
我将此复制到rtf,以便Windows使用写字板打印,因为从记事本打印时,我得到文件标题和页码,我不会。