Специальные символы в Python - PullRequest
2 голосов
/ 15 июля 2009

мне нужно использовать специальные символы в моем python-приложении. Например: ƃ У меня есть такая информация:

U+0183 LATIN SMALL LETTER B WITH TOPBAR

General Character Properties

In Unicode since: 1.1
Unicode category: Letter, Lowercase

Various Useful Representations

UTF-8: 0xC6 0x83
UTF-16: 0x0183

C octal escaped UTF-8: \306\203
XML decimal entity: &# 387;

Но когда я просто вставляю символы в python-скрипт, я получаю ошибку:

Не-ASCII символ '\ xc8' ... Как я могу использовать его в строках для моего приложения?

Ответы [ 6 ]

11 голосов
/ 15 июля 2009

Вы должны указать интерпретатору, какую кодировку вы используете, потому что, по-видимому, в вашей системе по умолчанию используется ascii. См. PEP 263 . В вашем случае поместите в начало файла следующее:

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

Обратите внимание, что вам не нужно писать точно , что; PEP 263 предоставляет больше свободы для размещения нескольких популярных редакторов, которые используют несколько иные соглашения для одной и той же цели. Кроме того, эта строка также может быть помещена во вторую строку, например, когда первый используется для shebang .

3 голосов
/ 15 июля 2009

Пока все ответы правильные, я подумал, что предоставлю более полное лечение:

Самый простой способ представить не-ASCII символ в литерале скрипта - это использовать префикс u и экранирование u или U, например:

print u"Look \u0411\u043e\u0440\u0438\u0441, a G-clef: \U0001d11e"

Это иллюстрирует:

  1. используя префикс u, чтобы убедиться, что строка является unicode объектом
  2. использование escape-символов для символов в основной многоязычной плоскости (U + FFFD и ниже)
  3. использование экранирования U для символов в других плоскостях (U + 10000 и выше)
  4. , что Ƃ (U + 0182 LATIN CAPITAL LETTER B с TOPBAR) и B (U + 0411 CYRILLIC CAPTIAL LETTER BE) являются лишь одним примером многих смущающе похожих кодов Unicode

Кодировка скрипта по умолчанию для Python, которая работает везде, - ASCII. Таким образом, вам придется использовать вышеупомянутые escape-символы для кодирования литералов не-ASCII символов. Вы можете сообщить интерпретатору Python о кодировке вашего скрипта в виде строки:

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

Это только меняет кодировку вашего скрипта. Но тогда вы могли бы написать:

print u"Look Борис, a G-clef: "

Обратите внимание, что вы все равно должны использовать префикс u для получения объекта unicode, а не объекта str.

Наконец, можно изменить кодировку по умолчанию, используемую для str ... но это не рекомендуется, так как это глобальное изменение и может плохо работать с другим кодом Python.

3 голосов
/ 15 июля 2009
1 голос
/ 15 июля 2009

Вы сохраняете файл Python как UTF-8? Ваш редактор поддерживает UTF-8? Используете ли вы строки Unicode, как это?

foo = u'ƃƃƃƃƃ'
0 голосов
/ 15 июля 2009

В питоне это должно быть

u"\u0183"

Символ u перед началом строки указывает, что строка содержит символы Unicode.

Смотрите здесь для справки:

http://www.fileformat.info/info/unicode/char/0183/index.htm http://docs.python.org/tutorial/introduction.html#unicode-strings

0 голосов
/ 15 июля 2009

Объявление строк Unicode.

somestring = u'æøå '

...