Юникод в PowerShell с Python? Альтернативные оболочки в Windows? - PullRequest
3 голосов
/ 21 января 2010

Мне нужна оболочка, которая поддерживает Unicode в Windows. 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 очень медленный, и я бы предпочел другую оболочку, есть идеи? Могу ли я сделать эту работу в PowerShell?

Ответы [ 5 ]

5 голосов
/ 21 января 2010

Консольная подсистема 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()
༒
ä
Ω
1 голос
/ 21 января 2010

Сам PowerShell - это Unicode, но у классической консоли есть проблемы с Unicode. Но PowerShell ISE определенно является Unicode.

Попробуйте это:

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

Это Python, который не играет хорошо.

Вы можете попробовать chcp 65001 перед запуском Python (чтобы установить кодовую страницу в UTF-8). Хотя не обещаю (я не пытался проверить, работает ли он, на этой машине не установлен Python).

0 голосов
/ 12 июня 2011

И обычная консоль Windows, и PowerShell ISE поддерживают Unicode. Смотрите сообщения в блоге Майкла Каплана для подробностей:

0 голосов
/ 21 января 2010

Обратите внимание, что при вводе chcp 65001 в консоли Windows шрифт должен быть Lucida Console и не любым из растровых шрифтов. Теоретически, другие моноширинные шрифты ttf должны работать, но они не работают (практически). Это проблема атрибутов, которые MS проверяет в моноширинных шрифтах, предназначенных для консоли, и Lucida Console включает их.

По крайней мере, одна проблема открыта для проблем Unicode в консоли Python Windows здесь .

0 голосов
/ 21 января 2010

Может быть, вам стоит попробовать IPython .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...