我想在Windows上支持Unicode的shell。它出货的PowerShell似乎并没有。
PowerShell V2(Windows 7 x64):
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很慢,我更喜欢另外一个shell,任何想法?我可以在PowerShell中完成这项工作吗?
答案 0 :(得分: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似乎通过stdout处理来自本机应用程序的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()
༒
ä
Ω
答案 1 :(得分:1)
PowerShell本身是Unicode,但是经典控制台存在Unicode问题。但PowerShell ISE绝对是Unicode。
试试这个:
PS C:\> $a = [char]0xf12
PS C:\> echo $a
这是Python不好玩的。
您可以在启动Python之前尝试chcp 65001
(将代码页设置为UTF-8)。虽然没有承诺(我没有尝试查看它是否有效,在这台机器上没有安装Python)。
答案 2 :(得分:0)
也许你应该尝试 IPython 。
答案 3 :(得分:0)
请注意,在Windows控制台中发布chcp 65001
时,字体必须为Lucida Console,而不任何位图字体。从理论上讲,其他等宽字体ttf字体应该可以工作,但它们(实际上)并不适用。这是一个属性问题,MS检查用于控制台的等宽字体,Lucida Console包含它们。
至少有一个问题是针对Python Windows控制台unicode问题here打开的。
答案 4 :(得分:0)
普通的Windows控制台和PowerShell ISE都支持Unicode。有关详细信息,请参阅Michael Kaplan的博客文章: