Re: [問題] 如何用Windows版的Python在cmd中印出檔 …
※ 引述《Holocaust123 (奔跑的蝸牛)》之銘言:
: A1. Python可能是把環境的locale當作自己執行時的locale
: 自己執行時的locale會影響執行時的Character Encoding
: 在Cygwin(Linux)環境下
: 使用者指定locale時可同時指定Character Encoding
: 例如我在~/.bashrc中寫 export LANG=zh_TW.UTF-8
: 表示locale為中文-台灣 Character Encoding為UTF-8
: Cygwin Python讀取LANG的值當作執行Python時用的locale及Character Encoding
: 於是可以正確印出UTF-8字元
但是 Cygwin 的環境變數要在 Cygwin 的 shell 下才有作用
而即使你直接在 cmd.exe 執行 Cygwin 的 Python
裡面的 encoding 仍然不會遵從 cmd.exe 的 codepage 設定
而且結果與 Cygwin shell 中執行效果相同
(至少我的 Cygwin 版本如此, 不過我的有點舊了...)
我的猜測是, Cygwin 應該有特別設定過, 不過不知道是設定 Python 還是整個 shell
一個證據是在你的實驗中, Cygwin 的 sys.stdout.encoding 是 None
這通常發生於把 stdout redirect 到一個檔案的狀況
如果是直接輸出到 shell, 那無論如何 shell 總是會有個 encoding 才對
(我的版本會出現 'US-ASCII', 不過還是那句, 我的太舊了...)
對 Cygwin 不熟, 所以就沒繼續研究下去了
: 然後是Windows
: 繁體中文版本的Windows預設locale是zh_TW
: (可以透過 控制台>地區及語言選項>地區選項>標準及格式 來修改)
: 與Linux不同的是
: 在Windows中一旦locale被指定
: Code Page(Character Encoding)似乎就定死了(這是我猜的 因為查不到改法)
其實用 chcp 就可以改了
也可以改成 UTF-8, code page 碼是 65001
不過這樣不夠, 因為 Python 不認得 cp65001 是哪來的編碼
詳細可以看這個網頁的內容(Stack Overflow 的討論)http://goo.gl/qd4nY
: 就是cp950(cp = code page)
: Windows Python讀取Windows的locale的值當作執行Python時用的locale及Charset
: 於是就印不出UTF-8字元了
: 若我以上的猜測是對的
: 想用Windows Python在cmd.exe印出Unicode字元
: 就必須先讓Python使用的Code Page是UTF-8才行
: 在Linux下export LANG=zh_TW.UTF-8就行了
: 但...Windows下要怎麼做呢??
上面講了一個方法
另一個方法是設 PYTHONIOENCODING 這個環境變數
參考 http://wp.me/p3U05-aC
: 或者
: 有沒有辦法直接修改Windows Python的source
: 來強制指定 locale-charset 為 zh_TW.UTF-8 呢?
: A2. Python可能是把環境的locale當作自己執行時的locale
: 自己執行時的locale會影響執行時的Character Encoding
: 所以會影響 sys.stdout.encoding
: A3. 不清楚 可能性太多了
: 總之大概是這種情況下不會 source ~/.bashrc 所以LANG是空的
: 所以sys.stdout.encoding也是空的
: (我覺得這個問題網路上一定有人問過 還在survey中...)
: A4. 不清楚(這我超想知道的 拜託會的人教一下 orz)
: 不知道我講的對不對 有錯還請多多指教
: 我真的很想知道正確答案...
結論:Windows sucks =p
--
「我最想要的同伴嘛,首先是要笑口常開,其次是我們能永遠不會發生誤會。
如果這些都能辦到的話,嗯,如果他是世界上第一流的橋手,也還不錯。」
-- 班尼多‧加羅素,前義大利藍隊成員
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
→
04/23 09:14, , 1F
04/23 09:14, 1F
→
04/23 09:15, , 2F
04/23 09:15, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章