【发布时间】:2010-12-23 06:52:07
【问题描述】:
我尝试使用以下脚本将位于 Web 服务器中的文本文件传输到客户端(文本文件为 UTF-16)。
import cgi
print "Content-Type: text/plain"
print "Content-Disposition: attachment; filename=TEST.txt"
print
filename = "C:\\TEST.TXT"
f = open(filename, 'r')
for line in f:
print line
但是,当我打开下载的文件时,该文件全是奇怪的字符。我尝试使用rb 标志,它也没有。
有什么我错过的吗?我希望客户端通过查询上述脚本下载的文件(TEST.TXT)与服务器中的文件完全相同。
我也尝试明确指定编码。
import cgi
print "Content-Type: text/plain; charset=UTF-16"
print "Content-Disposition: attachment; filename=TEST.txt"
print
filename = "C:\\TEST.TXT"
f = open(filename, 'r')
for line in f:
print line.encode('utf-16')
这也不行。
服务器上的原始文件
下载的文件
如果您有兴趣尝试一下,我会将original text file 发布在这里。
【问题讨论】:
-
我认为问题在于您的文本文件不以 UTF-16 BOM 开头。即使使用
codecs.open(),我也找不到任何方法让python正确解码。也许您可以将正确的 BOM 添加到文件中? -
但是说我的文本文件没有被正确编码是不正确的,因为记事本、Notepad++、Firefox 能够正确打开我的文本文件。仅供参考,文本文件是使用 C++ 的 wostringstream 生成的
-
我不是说你的文件没有正确编码,而是我无法让 python 正确解码它:) 因为你使用 python 来读取和传输文件,所以它有为了能够对其进行解码,这就是我建议您在文件中添加 BOM 的原因。
-
文本文件是由第三方 C++ 库编写的,目前我无法控制 :)
-
@Frédéric Hamidi,或者我可以将其视为二进制文件吗?但是,“打印”是否适用于二进制内容?
标签: python