Как я могу отображать родные акценты для языков в консоли в Windows? - PullRequest
3 голосов
/ 13 августа 2010
print "Español\nPortuguês\nItaliano".encode('utf-8')

Ошибки:

Traceback (последний вызов был последним): файл "", строка 1, в печати "Español \ nPortuguês \ nItaliano" .encode ('utf-8')UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xf1 в позиции 4: порядковый номер не находится в диапазоне (128)

Я пытаюсь создать многоязычную консольную программу в Windows.Это возможно?Я также сохранил файл в кодировке UTF-8, я получаю ту же ошибку.

* РЕДАКТИРОВАТЬ Я просто вывод текста в этой программе. Я перехожу на шрифты lucida, я получаю это: alt text http://img826.imageshack.us/img826/7312/foreignlangwindowsconso.png

Я просто ищу портативный способ корректно отображать иностранные языки на консоли в окнах. Если это удастся сделать кроссплатформенным, даже лучше. Я подумал, что ответом является utf-8,но вы все говорите мне шрифты и т. д. также играет роль. Так что у кого-нибудь есть окончательный ответ?

Ответы [ 3 ]

3 голосов
/ 13 августа 2010

Краткий ответ:

# -*- coding: utf-8 -*-
print u"Español\nPortuguês\nItaliano".encode('utf-8')

Первая строка сообщает Python, что ваш файл закодирован в UTF-8 (ваш редактор должен использовать те же настройки), и эта строка всегда должна быть в начале вашего файла.

Другое дело, что Python 2 знает два разных объекта basestring - str и unicode.Префикс u создаст такой объект Unicode вместо объекта str по умолчанию, который затем можно кодировать как UTF-8 (но печать объектов Unicode напрямую также должна работать).

2 голосов
/ 13 августа 2010

Прежде всего, в Python 2.x вы не можете encode a str, который имеет символы не ASCII. Вы должны написать

print u"Español\nPortuguês\nItaliano".encode('utf-8')

Использование UTF-8 на консоли Windows сложно.

  • Необходимо установить шрифт командной строки на шрифт Unicode (из которых по умолчанию доступен только Lucida Console), иначе вы все равно получите кодировку IBM437.
  • chcp 65001
  • Изменить encodings._aliases, чтобы трактовать "cp65001" как псевдоним UTF-8.

И даже тогда, похоже, это не работает правильно.

1 голос
/ 13 августа 2010

Это работает для меня:

# coding=utf-8
print "Español\nPortuguês\nItaliano"

Возможно, вы захотите запустить его, используя chcp 65001 && your_program.py Также попробуйте изменить шрифт командной строки на Lucida Console.

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