【问题标题】:Unicode in PowerShell with Python? Alternative shells in Windows?PowerShell中的Unicode与Python? Windows 中的替代外壳?
【发布时间】:2011-01-07 11:33:40
【问题描述】:

我想要一个在 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 中完成这项工作吗?

【问题讨论】:

标签: python windows unicode powershell


【解决方案1】:

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()
༒
ä
Ω

【讨论】:

  • 是的,正常的 python 2.6.2 无法在 ISE 中打印这些字符,我遇到与常规 powershell 相同的错误。
  • 不幸的是,您运行的是 WNU Windows:WNU's Not Unix
  • Windows 控制台不是基于代码页的,它们是基于 Unicode 的,就像 Windows 的所有组件一样。代码页仅适用于旧版应用程序。
【解决方案2】:

PowerShell 本身是 Unicode,但经典控制台存在 Unicode 问题。但 PowerShell ISE 绝对是 Unicode。

试试这个:

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

这是 Python 玩得不好。

您可以在启动 Python 之前尝试chcp 65001(将代码页设置为 UTF-8)。虽然没有承诺(我没有尝试查看它是否有效,这台机器上没有安装 Python)。

【讨论】:

    【解决方案3】:

    请注意,在 Windows 控制台中发出 chcp 65001 时,字体必须是 Lucida Console 并且不能是任何位图字体。理论上,其他等宽 ttf 字体应该可以工作,但它们(实际上)不行。这是 MS 检查用于控制台的等宽字体的属性问题,而 Lucida 控制台包含它们。

    对于 Python Windows 控制台 unicode 问题here,至少存在一个问题。

    【讨论】:

    • 我相信 Consolas 也应该可以工作(它的 TrueType)。这是我在控制台窗口中使用的字体。
    • 哦,是的,你可能是对的,但由于我的 MS Windows 体验从未达到 Vista 或 7,我不知道。
    【解决方案4】:

    普通的 Windows 控制台和 PowerShell ISE 都支持 Unicode。有关详细信息,请参阅 Michael Kaplan 的博客文章:

    【讨论】:

    • 很好的发现。感谢分享!
    【解决方案5】:

    也许你应该试试 IPython

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2022-08-09
      相关资源
      最近更新 更多