2010-03-30 74 views
0

我目前正在研究一个多语言频道的irc bot,并且我遇到了一些unicode问题,这些问题几乎无法解决。Python unicode问题(2.6)

无论什么配置的unicode编码,我似乎尝试,下面的代码位于内部的列表函数只是平坦的没有做任何事情(c.notice是一个类函数,它向irc服务器发送一个NOTICE命令),或者什么时候它确实做了一些事情,吐出一些显然没有编码的东西。

该命令应该是发送天子,但是看起来好像在发送同一个命令的先前配置时一样。我在下面指出的是“不发送”多样性。在此之前我还没有和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)) 
+0

c.notice如何做其业务?我认为最后一行应该是'c.notice(nick,u“...%s”%(ukeys))''。否则,这个Python代码应该工作 - 如果不是,我建议看看其他地方发生了什么。尝试做一下'ukeys'的'print'(或'logging.debug()')。 – 2010-03-30 18:25:41

回答

1

的几点:

  • 的字节数“å¤©å “是”天子“的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

更改此:

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")行。

1

原来,问题出在我用来测试输出的客户端 - 它本身没有正确处理unicode!

+0

这很可能是因为IRC没有被指定使用Unicode(或其他),并且由于IRC的起源,ISO-8859-1在历史上是常见的。 – caf 2010-04-06 13:24:47