作者LearnRPG (真是有趣的地方)
看板Python
标题[问题] 呼叫外部执行档 无法开启中文档案
时间Thu Dec 6 10:01:26 2012
平台:WinXP
假设我想利用 notepad.exe 去开启一个新文件
如果是这样写没有问题
exe = 'notepad.exe'
param = 'test.txt'
subprocess.Popen([exe, param], stdout=subprocess.PIPE).communicate()[0]
执行後会询问是否要开启
test.txt
但是如果把 param 改成
param ='测试.txt'
执行後询问的档名就变成乱码
皜祈岫.txt
就算改成
param = u'测试.txt' 也没用
如果把 param 改成
param = '许.txt'
执行会说
档案名称、目录名称或磁碟区标签语法错误
我再想是不是有 big-5 码的问题
但是我改成
param = '许.txt'.encode('utf-8') 也一样
且我文件的最前面有加上
# -*- coding: utf-8 -*-
想来问问是否有人有经验 我是否有遗漏的地方
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.127.194.130
※ 编辑: LearnRPG 来自: 140.127.194.130 (12/06 10:04)
1F:→ kilfu0701:u'I://新文字文件.txt'.encode("big5") ? 12/06 10:15
2F:→ uranusjr:Windows sucks... 12/06 10:17
3F:→ CMJ0121:我猜 你应该是要转big5才对 我手边win7是用big5编码 12/06 10:20
4F:→ LearnRPG:1F:这样是可以的!! 2F:我也知道啊(哭 3F:感谢 12/06 10:24
5F:→ LearnRPG:但是要是我的测试这边改成 日文あいうえお.txt呢?? 12/06 10:24
6F:→ LearnRPG:因为毕竟是想利用 utf-8 的编码去开档避开各语系问题 12/06 10:25
7F:→ LearnRPG:还是利用big5的话可以开但是会有空白 我不想装补完计画 12/06 10:28
9F:→ bob123:修改lib/subprocess.py就可 3.x应该就没这问题了吧 12/06 10:44
依照 bob大提供的这页修改
http://bugs.python.org/file11674/Python-2.5.2-subprocess.patch
exe = 'notepad.exe'
param = u"测试.txt"
subprocess.Popen([exe, param], stdout=subprocess.PIPE).communicate()[0]
不用加上 .encode('big5') 就可以正确了
但是还是卡在要是档名有 非 big5 (例如日文语系)就不行
依然出现档案名称、目录名称或磁碟区标签语法错误
加上 .encode('big5') 则开启" .txt" ...
这原因是不是出在 windows 在系统编码上不是用 unicode ...?
但是自己去档案总管开又可以开 所以想说是不是 python 有可用的方法
※ 编辑: LearnRPG 来自: 140.127.194.130 (12/06 11:18)
10F:→ LearnRPG:回报一下 依照 bob 的 3.x 没这问题我去使用 python3.3 12/06 11:31
11F:→ LearnRPG:可以很直觉的使用了 太感谢大家了 !!! 12/06 11:32
12F:推 AlanSung:encode(sys.stdin.encoding) 试看看? 12/07 08:07