Персонаж - PullRequest
       1

Персонаж

1 голос
/ 01 сентября 2011

Во время списания веб-страниц я получил символ в кодировке Юникод.Мой вывод «Последнее прибежище, +977 1 4700525».Так что вместо â, должен быть ☎ ☎.

Как мне вернуть его на телефонный знак (☎)?Таким образом, результатом будет «The Last Resort, ☎ +977 1 4700525».

Криш

Ответы [ 2 ]

8 голосов
/ 01 сентября 2011

Когда вы очищаете сайт, Python распознает символ «☎» и сохраняет его в строке.

Этот символ имеет кодовую точку 260e. Однако, когда символы хранятся , они сохраняются как последовательности из одного или нескольких байтов . Что это за байты, зависит от используемой кодировки. В вашем случае, вероятно, использовался UTF-8.

Кодировка UTF-8 этого символа - E2 98 8E (см. http://www.fileformat.info/info/unicode/char/260e/index.htm).

Итак, теперь у вас есть последовательность байтов, представляющая вашего персонажа. что ты собираешься с этим делать? Вы собираетесь вывести его куда-нибудь. Но вы хотите преобразовать эту байтовую строку в символы, поэтому вам нужно указать кодировку. Допустим, вы указываете кодировку Windows-1252 (см. http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT).

  • E2 - это 1018 *
  • 98 - это
  • 8E Ž

это то, что вы видите. Вам нужно написать свою строку Python в UTF-8. Или, если вы пишете в HTML, используйте предложение DruvPathak об использовании ссылок на сущности символов HTML, в данном случае

☎

или

☎

Я подозреваю, что произошло то, что вы не указали кодировку при написании строки и Windows-1252 была по умолчанию. Или, возможно, ваш браузер по умолчанию настроен на отображение Windows-1252.

Интересной особенностью отправки данных в HTML является то, что вы можете отправлять поток байтов UTF-8, установить тип содержимого HTTP на UTF-8 и поместить метатеги в ваш HTML-документ, утверждая, что страница закодирована в UTF-8, но если конечный пользователь использует браузер, который позволяет ему или ей переопределить кодировку, отправляемую сервером, есть вероятность, что конечный пользователь увидит данные неправильно.

Если вы используете ссылки на символьные объекты, браузер всегда будет отображать их правильно.

Может быть неудобно использовать эти ссылки на сущности повсюду. Большинство людей в наши дни не настраивают браузер вручную на переопределение кодировки, отправляемой сервером.

ДОПОЛНЕНИЕ

Допустим, у вас есть строка в Юникоде, и вы хотите создать обычную (не-Юникод) строку ( тип str ), содержащую ссылки на сущности HTML-символов. Вот полный пример сценария, который иллюстрирует прямой, хотя и не обязательно самый питонский способ сделать это:

def to_character_entity_reference_string(s):
    return "".join(["&#" + str(ord(c)) + ";" for c in s])

print(to_character_entity_reference_string(u'काठमाण्डु'))

Если вы запустите этот скрипт, вы получите вывод

काठमाण्डु

Вы можете поместить этот вывод в файл и открыть его в веб-браузере, и вы увидите काठमाण्डु, отображаемое, как и ожидалось.

Вы можете создать варианты этого базового сценария, чтобы символы с кодовыми точками меньше 128 сохранялись, а все остальное становится ссылкой на символьную сущность. Вы также можете изучить функции Python encode и decode. И еще раз, ссылки на сущности персонажа защищают людей, которые вручную изменяют свои настройки браузера, чтобы переопределить ваши кодировки, что, конечно, хорошо, но может считаться излишним. Можно сказать, что конечные пользователи, которые возятся с этими настройками, получают то, что они заслуживают, поэтому общепринятым является настройка всего лишь для кодирования всего в UTF-8, точка. Тем не менее, приятно знать о ссылках на сущности персонажа.

1 голос
/ 01 сентября 2011

Вы можете напечатать их на своей странице результатов, используя объекты HTML с заданным кодом.

Например: http://www.danshort.com/HTMLentities/index.php?w=dingb

Или используйте функцию string.encode для кодирования в нужной кодировке.

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