Как кодировать строку «Importação de petróleo» в python? - PullRequest
2 голосов
/ 10 марта 2012

Я хочу использовать «Importação de petróleo» в моей программе.

Как я могу это сделать, потому что все кодировки дают мне ошибки, которые не могут кодироваться.

Ответы [ 6 ]

4 голосов
/ 10 марта 2012

Я думаю, вы путаете строку __repr__ с ее __str__:

>>> s = u"Importação de petróleo"
>>> s
u'Importa\xe7\xe3o de petr\xf3leo'
>>> print s
Importação de petróleo

Нет проблем с \xe7 и друзьями; они просто представляют кодирование для этих специальных символов. Вы не можете избежать их, и вам не нужно:)

Обязательная для прочтения ссылка на Unicode: Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (никаких оправданий!)

3 голосов
/ 10 марта 2012

Сделай это

# -*- coding: utf-8 -*-

print 'Importação de petróleo'

место

# -*- coding: utf-8 -*-

в самом верху программы (первая строка). Также сохраните ваш код как utf-8 (по умолчанию, если вы используете linux)

2 голосов
/ 10 марта 2012

Если вы используете символы в исходном (.py) файле, находящемся за пределами диапазона ASCII, вам нужно будет указать кодировку в верхней части файла, чтобы лексер Python знал, как читать и интерпретироватьсимволы в файле.

Если это так, то в качестве первой строки вашего файла используйте следующее:

# coding: utf-8

(Если ваш файл фактически находится в другомкодирование, такое как ISO-8859-1, тогда вам нужно будет использовать его вместо этого. Python может обрабатывать несколько различных кодировок символов, вы просто должны сказать ему, чего ожидать)

1 голос
/ 10 марта 2012

Как уже упоминалось в спецскопе, во-первых, вы должны добавить это в качестве первой строки вашей программы:

# -*- coding: utf-8 -*-

Если вы этого не сделаете, вы получите ошибку, которая выглядит примерно так:

SyntaxError: Non-ASCII character '\xc3' in file /tmp/blah.py on line 10, 
but no encoding declared; see http://www.python.org/peps/pep-0263.html 
for details

Пока все хорошо. Теперь вы должны убедиться, что каждая строка, которая содержит что-либо, кроме простого ASCII, имеет префикс u:

print u'Importação de petróleo'

Но есть еще один шаг. Это отдельная тема, но есть вероятность, что вам придется в конечном итоге re -кодировать эту строку, прежде чем отправить ее в stdout или файл.

Вот практические правила для Unicode в Python:

  1. Если это вообще возможно, убедитесь, что любые данные, с которыми вы работаете, находятся в UTF-8.
  2. Когда вы читаете внешние данные в кодировке UTF-8 в вашу программу, немедленно декодируйте их в Unicode.
  3. Когда вы отправляете данные из вашей программы (в файл или stdout), убедитесь, что вы перекодировали их как UTF-8.

Кстати, все это меняется в Python 3.

1 голос
/ 10 марта 2012

Добавление 'u' перед строкой делает его юникодом.Здесь приведена подробная информация об обработке Unicode в Python 2.x: -

Поддержка Unicode в Python 2.x

0 голосов
/ 10 марта 2012

Справка по классу Юникод в модуле Встроенный :

Класс Юникод (базовая строка) |Юникод (строка [, кодировка [, ошибки]]) -> объект |
|Создайте новый объект Unicode из заданной закодированной строки.|по умолчанию используется текущая кодировка строки по умолчанию.|ошибки могут быть «строгими», «заменять» или «игнорировать» и по умолчанию «строгими».|

попробуйте использовать "utf8" в качестве кодировки для Unicode ()

...