将Web服务器中的文本文件传输到客户端

时间:2010-12-23 06:52:08

标签: python

我尝试使用以下脚本将位于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')

这也不起作用。


服务器上的原始文件 alt text


已下载的文件 alt text


如果您有兴趣尝试一下,我会在此发布original text file

2 个答案:

答案 0 :(得分:2)

首先,您应在Content-Type标题中指定文件encoding

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 :(得分:1)

只需忽略文本编码,并通过0修改将字节到字节传输到客户端。

#!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