在PowerShell中使用Python的Unicode?Windows中的替代终端?
我想要一个在Windows上支持Unicode的命令行工具。现在的PowerShell似乎不支持这个功能。
在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运行得很慢,我更希望能用其他的命令行工具,有什么建议吗?我能在PowerShell中实现这个功能吗?
5 个回答
注意,在Windows控制台中输入 chcp 65001
时,字体必须是Lucida Console,而不能是任何位图字体。理论上,其他等宽的ttf字体应该可以用,但实际上并不行。这是因为微软在检查用于控制台的等宽字体时,有一些特定的属性,而Lucida Console包含了这些属性。
关于Python在Windows控制台中的unicode问题,至少有一个问题正在处理,详情可以在这里查看。
PowerShell本身是支持Unicode的,但传统的控制台在处理Unicode时会有一些问题。不过,PowerShell ISE绝对是支持Unicode的。
你可以试试这个:
PS C:\> $a = [char]0xf12
PS C:\> echo $a
这是Python不太好用。
你可以在启动Python之前试试输入 chcp 65001
(这个命令是把编码设置为UTF-8)。不过我不能保证一定有效(我没有尝试过,因为这台机器上没有安装Python)。
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()
༒
ä
Ω