2010-01-20 53 views
3

我想要一個在Windows上支持Unicode的shell。 PowerShell似乎並不像。PowerShell中的Python與Python? Windows中的替代shell?

的PowerShell V2(的Windows 7   64):

PS C:\> powershell 
Windows PowerShell 
Copyright (C) 2009 Microsoft Corporation. All rights reserved. 

PS C:\> python 
Python 2.6.2 (r262:71605, Apr 14 2009, 22:46:50) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> unicode_char=unichr(0xf12) 
>>> unicode_char 
u'\u0f12' 
>>> print unicode_char 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\python26\lib\encodings\cp437.py", line 12, in encode 
    return codecs.charmap_encode(input,errors,encoding_map) 
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0f12' in position 0: character maps to <undefined> 
>>> 

我得到PowerShell ISE類似的結果,雖然網絡上對要求它是Unicode支持或者其他一些地方...

的Python的集成開發環境(IDLE)2.6.2似乎很好地工作:

>>> unicode_char=unichr(0xf12) 
>>> print unicode_char 
༒ 
>>> 

IDLE很慢,一nd我更喜歡另一個shell,有什麼想法?我可以在PowerShell中完成這項工作嗎?

+0

相關:Python中,Unicode和Windows控制檯(http://stackoverflow.com/q/5419/4279) – jfs 2015-09-23 19:18:00

回答

5

Windows控制檯子系統不是Unicode,而是基於代碼頁。你可以玩設置代碼頁:

PS> chcp 65001 
PS> ipy64.exe 
>>> print unichr(0x3a9) 
Ω 

我無法得到(0xF12)給與正確的字符與該代碼頁。也許它在另一個代碼頁上可用。

ISE可以顯示Unicode和接受Unicode輸入,例如,

PS> [char]0xf12 
༒ 
PS> [char]0xe4 
ä 
PS> [char]0x3a9 
Ω 

然而,ISE似乎並不與IronPython的解釋發揮出色。

進一步說ISE似乎處理Unicode標準輸出通過從本機應用程序來點:

$src = @' 
namespace Foo { 
    public class Bar 
    { 
     public static void Baz() 
     { 
      System.Console.Out.WriteLine("\u0f12"); 
      System.Console.Out.WriteLine("\u00e4"); 
      System.Console.Out.WriteLine("\u03a9"); 
     } 
    } 
} 
'@ 

Add-Type -TypeDefinition $src 

[Foo.Bar]::Baz() 
༒ 
ä 
Ω 
+0

是的,正常的python 2.6.2無法在ISE中打印這些字符,我得到的錯誤與常規powershell相同。 – 8steve8 2010-01-21 00:44:28

+0

不幸的是,您正在運行WNU Windows:WNU的非Unix – 2010-01-21 03:17:17

+1

有用 – 8steve8 2010-01-21 20:57:49

0

也許你應該試試IPython

+0

with'pyreadline' – 2010-01-21 02:15:07

+0

ipython仍然在windows命令提示符下運行 – endolith 2011-04-15 04:42:52

1

PowerShell的本身是Unicode,但經典的控制檯有使用Unicode的問題。但PowerShell ISE絕對是Unicode。

試試這個:

PS C:\> $a = [char]0xf12 
PS C:\> echo $a 

這是Python的不是踢得好看。

在啓動Python之前,您可以嘗試chcp 65001(將代碼頁設置爲UTF-8)。沒有承諾雖然(我沒有試圖看看它的工作原理,沒有安裝在這臺機器上的Python)。

0

需要注意的是,在Windows控制檯發出chcp 65001當字體必須是龍力控制檯和任何位圖字體。理論上,其他等寬字體ttf字體應該可以工作,但他們不(實際上)。 MS檢查用於控制檯的等寬字體的屬性問題,並且Lucida Console包含它們。

至少有一個問題對於Python Windows控制檯unicode問題here打開。

+1

我相信Consolas也應該工作(它的TrueType)。這是我在控制檯窗口中使用的字體。 – 2010-01-21 17:57:58

+0

哦,是的,你可能是對的,但由於我的MS Windows體驗從未達到Vista或7,我不知道。 – tzot 2010-01-22 21:49:28