... не зря их называют "кодировками" ...
Небольшая преамбула: считайте юникод нормой или идеальным состоянием. Юникод - это просто таблица символов. №65 - заглавная латинская буква A. №937 - греческая заглавная буква омега. Только то.
Чтобы компьютер мог хранить и / или управлять Unicode, он должен кодировать его в байтах. Самая простая кодировка Unicode - UCS-4; каждый символ занимает 4 байта, и доступны все ~ 1000000 символов. 4 байта содержат номер символа в таблицах Unicode в виде 4-байтового целого числа. Еще одна очень полезная кодировка - UTF-8, которая может кодировать любой символ Unicode от одного до четырех байтов. Но есть также некоторые ограниченные кодировки, такие как "latin1", которые включают очень ограниченный набор символов, в основном используемых в западных странах. Такие кодировки используют только один байт на символ.
В принципе, Unicode можно закодировать с помощью множества кодировок, а закодированные строки можно декодировать в Unicode. Дело в том, что Unicode появился довольно поздно, поэтому все мы, выросшие с использованием 8-битного набора символов, слишком поздно узнали, что все это время мы работали с закодированными строками. Кодировка может быть ISO8859-1, или Windows CP437, или CP850, или, или, или, в зависимости от нашей системы по умолчанию.
Поэтому, когда в исходном коде вы вводите строку «добавить« Мониторинг »в список» (и я думаю, вам нужна строка «добавить« Мониторинг »в список», обратите внимание на вторую цитату), вы фактически уже используете строку закодировано в соответствии с кодовой страницей вашей системы по умолчанию (байтом \ x93, я предполагаю, что вы используете кодовую страницу Windows 1252, «Western»). Если вы хотите получить Unicode из этого, вам нужно декодировать строку из кодировки "cp1252".
Итак, вы хотели сделать следующее:
"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")
К сожалению, Python 2.x также включает .encode
метод для строк; это удобная функция для «специальных» кодировок, таких как «zip», «rot13» или «base64», которые не имеют ничего общего с Unicode.
В любом случае, все, что вам нужно помнить для постоянных преобразований Unicode, это:
- строка Unicode кодируется в строку Python 2.x (фактически, последовательность байтов)
- строка Python 2.x декодируется в строку Unicode
В обоих случаях необходимо указать кодировку, которая будет использоваться.
Мне не очень понятно, я хочу спать, но очень надеюсь, что помогу.
PS Юмористическое примечание: у майя не было Unicode; древние римляне, древние греки, древние египтяне тоже этого не сделали. Все они имели свои собственные «кодировки» и почти не уважали другие культуры. Все эти цивилизации рассыпались в прах. Подумайте, люди! Сделайте свои приложения совместимыми с Unicode на благо человечества. :)
PS2 Пожалуйста, не портите предыдущее сообщение словами «Но китайцы…». Однако, если вы чувствуете склонность или обязанность сделать это, отложите это, подумав, что Unicode BMP заполнен в основном китайскими идеограммами, следовательно, китайский язык является основой Unicode. Я могу продолжать придумывать возмутительную ложь, пока люди разрабатывают приложения с поддержкой Unicode. Ваше здоровье!
person
tzot
schedule
16.12.2008