Проблемы с Unicode в Python (2.6) - PullRequest
0 голосов
/ 30 марта 2010

В настоящее время я работаю над IRC-ботом для многоязычного канала и сталкиваюсь с некоторыми проблемами с Unicode, которые практически невозможно решить.

Независимо от того, какую конфигурацию кодировки Unicode я, похоже, пытаюсь использовать, функция list, внутри которой находится приведенный ниже код, просто ничего не делает (c.notice - это функция класса, которая отправляет команду NOTICE на сервер irc) или когда она делает что-то, выплевывает что-то, что явно не закодировано.

Команда должна отправлять 天子, но вместо этого она кажется излишней при отправке с предыдущей конфигурацией тех же команд. Тот, который я указал ниже, относится к категории «ничего не отправлять». Я не работал с Unicode до этого, и поэтому я довольно застрял. Я также уверен, что, как следствие, я делаю это совершенно неправильно.

(compileCMD просто берет список и выплевывает одну строку из всех элементов в списке)

uk = self.compileCMD(self.faq.keys(),0)
ukeys = unicode(uk,"utf-8").encode("utf-8")
c.notice(nick, u"Current list of faq entries: %s" % (uk))

Ответы [ 3 ]

1 голос
/ 31 марта 2010

Оказывается, проблема была в клиенте, который я использовал для проверки вывода - он сам не обрабатывал юникод должным образом!

1 голос
/ 30 марта 2010

Несколько баллов:

  • Байты "å¤ © å" - это кодировка UTF-8 "天子", так что вы уверены, что это не так? Использует ли программа / ..., которая должна обрабатывать данные, UTF-8, или она просто интерпретирует ввод как другую кодировку, например Latin-1?
  • unicode(uk,"utf-8").encode("utf-8"): декодирование UTF-8 с последующим перекодированием в UTF-8 ничего не меняет.
  • ukeys = unicode(uk,"utf-8").encode("utf-8"): Переменная ukeys, содержащая перекодированные данные, в дальнейшем не используется.
0 голосов
/ 31 марта 2010

Изменить это:

u"Current list of faq entries: %s" % (uk)

в это:

"Current list of faq entries: %s" % (uk)

и попробуйте снова. Убедитесь, что uk уже является строкой в ​​кодировке UTF-8 (не Unicode).

Я предполагаю, что метод c.notice принимает закодированную строку в качестве аргумента, поскольку он должен отправлять закодированную строку по проводам. Если канал многоязычный, можно с уверенностью предположить, что он будет закодирован как UTF-8. Также отбросьте бесполезную строку ukeys = unicode(uk,"utf-8").encode("utf-8").

...