Преобразование в полноразмерные символы, ошибка Unicode в окне с Python 3

#python #windows #unicode

#python #Windows #unicode

Вопрос:

Я пытаюсь преобразовать буквенно-цифровую строку в японские полноразмерные символы в Python 3.8.3 в Windows.

Приведенный ниже код работает на компьютере с OSX:

 import sys

def convert_to_full_width(s):
    """Converts string to full-width characters.

    Args:
        s (str): Alphanumeric text.

    Returns:
        (str): Text in full-width characters.
    """
    WIDE_MAP = dict((i, i   0xFEE0) for i in range(0x21, 0x7F))
    WIDE_MAP[0x20] = 0x3000

    return s.translate(WIDE_MAP)

print(convert_to_full_width("XYZ123"))
  

Но выдает следующую ошибку в VSCode в Windows:

 UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-5: character maps to <undefined>
  

Что может быть причиной этой проблемы?

Комментарии:

1. Ваша консоль интерпретатора командной строки / IDE использует 8-разрядную кодовую страницу вместо кодека с полной поддержкой Unicode (например, UTF-8). Это проблема среды, а не то, что вы можете исправить из Python. (В Python вы можете обойти проблему, только не используя print() .)

2. Он отлично работает с обычным консольным окном и оболочкой IDLE. Оно должно быть ограничено VSCode.

3. запустите chcp 65001 , чтобы перейти на UTF-8

4. @phuclv, API-интерфейс строки байтов консоли не поддерживает чтение ввода с клавиатуры или вставленного ввода с консоли в формате UTF-8 для символов, отличных от ASCII (т.Е. порядковых номеров символов выше 127). Поскольку chcp.com 65001 для входных и выходных кодовых страниц устанавливается значение UTF-8, оно не работает, за исключением англоязычных локалей, которые заботятся только о выводе, отличном от ASCII (т. Е. Это англоцентрический совет). Это также совершенно не нужно для Python 3.6 , который использует консольный широкосимвольный (UTF-16) API под капотом и предоставляет его коду Python как UTF-8.