python3 下载中文文件名乱码

和泥小工 2016-11-13 09:29:09
最近在学习python,用的python3.5.2,在练习cgi下载文件时,用的文件名是中文,结果下载后的文件名中的中文用_代替。
以下是代码:
html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>cgi-upload</title>
</head>
<body>
<form action="./cgi-bin/cgidownload.py" method="post">
<input type="text" name="filename">
<input type="submit" value="下载 ">
</form>
</body>
</html>

下面是对应的python代码cgidownload.py
#!/usr/bin/python
# -*-coding:utf-8 -*-

import cgi
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='myapp.log',
filemode='w')

form=cgi.FieldStorage()
filename=form.getvalue("filename")
logging.debug(filename)#日志打印正常
#print("Content-Disposition:attachment;filename=%s"%(filename))#以"中文.txt"为例 浏览器显示"__.txt"
print("Content-Disposition:attachment;filename=%s"%(filename.encode()))#以"中文.txt"为例 浏览器显示"b'_xe4_xb8_xad_xe6_x96_x87.txt'"
print()
fo=open("E:/tmp/%s"%filename,'r')
str1=fo.read();
print(str1)
fo.close()

代码中用了encode()测试过,运行结果见注释,怎样才能显示中文,还请知道的帮忙解答一下,多谢
...全文
2162 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
和泥小工 2016-11-15
  • 打赏
  • 举报
回复
引用 1 楼 riding 的回复:
没明白你的意思?是中文的文件名还是文件内容是乱码? 你的*.txt文件是什么编码,如果是UTF-8,在打开文件时用 fopen( "E:/tmp/%s"%filename",'r',Encoding="UFT-8") 打开。 同样是GBK编码用GBK打开。
中文文件名乱码 就是浏览器保存的文件名 用这段代码:print("Content-Disposition:attachment;filename=%s"%(filename)) 以"中文.txt"为例 保存时浏览器显示"__.txt" 用这段代码print("Content-Disposition:attachment;filename=%s"%(filename.encode())) 以"中文.txt"为例 保存时浏览器显示"b'_xe4_xb8_xad_xe6_x96_x87.txt'"
riding 2016-11-15
  • 打赏
  • 举报
回复
没明白你的意思?是中文的文件名还是文件内容是乱码? 你的*.txt文件是什么编码,如果是UTF-8,在打开文件时用 fopen( "E:/tmp/%s"%filename",'r',Encoding="UFT-8") 打开。 同样是GBK编码用GBK打开。

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧