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