将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')
但这也不行。
服务器上的原始文件
下载的文件
我会把这个 原始文本文件 放在这里,以防你有兴趣去试试。
2 个回答
2
首先,你需要在你的 Content-Type
头信息中指定文件的 编码方式:
print "Content-Type: text/plain; charset=UTF-16"
print "Content-Disposition: attachment; filename=TEST.txt"
print
接下来,当你把内容发送给客户端时,必须把这些行用 UTF-16 编码:
print "\xff\xfe", # send UTF-16 big-endian BOM
for line in f:
print line.encode("utf-16be")
1
只需忽略文本编码,直接将字节逐个传输给客户端,完全不做任何修改。
#!c:/Python27/python.exe -u
import sys
print "Content-Type: text/plain;"
print "Content-Disposition: attachment; filename=TEST.txt"
print
filename = "C:\\TEST.TXT"
f = open(filename, 'rb')
while True:
data = f.read(4096)
sys.stdout.write(data)
if not data:
break