[問題] 呼叫外部執行檔 無法開啟中文檔案
平台: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)
→
12/06 10:15, , 1F
12/06 10:15, 1F
→
12/06 10:17, , 2F
12/06 10:17, 2F
→
12/06 10:20, , 3F
12/06 10:20, 3F
→
12/06 10:24, , 4F
12/06 10:24, 4F
→
12/06 10:24, , 5F
12/06 10:24, 5F
→
12/06 10:25, , 6F
12/06 10:25, 6F
→
12/06 10:28, , 7F
12/06 10:28, 7F
推
12/06 10:42, , 8F
12/06 10:42, 8F
→
12/06 10:44, , 9F
12/06 10:44, 9F
依照 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)
→
12/06 11:31, , 10F
12/06 11:31, 10F
→
12/06 11:32, , 11F
12/06 11:32, 11F
推
12/07 08:07, , 12F
12/07 08:07, 12F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):