Python编码 – 有什么解释吗?
有人可以向我解释为什么
python有这种行为吗?
我来解释吧. 背景 我有一个python安装,我想使用一些不在ASCII表中的字符. 现在,使用替换我的字典键的方法,我想以动态的方式将html模板插入到我的字符串中. 我放入html页面的标题: <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> ...... <!-- Some Css's --> </head> 不幸的是,我的html doc来找我(在那些替换之后)有一些错误的字符(未转换?错误转换?) 所以,我打开一个终端并开始做一些订单: 1 - Python 2.4.6 (#1,Jan 27 2012,15:41:03) 2 - [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2 3 - Type "help","copyright","credits" or "license" for more information. 4 - >>> import sys 5 - >>> sys.getdefaultencoding() 6 - 'utf-8' 7 - >>> u'èéò?' 8 - u'xe8xe9xf2xe7' 9 - >>> u'èéò?'.encode('utf-8') 10 - 'xc3xa8xc3xa9xc3xb2xc3xa7' 11 - >>> u'è' 12 - u'xe8' 13 - >>> u'è'.encode() 14 - 'xc3xa8' 题 看看[7-10]行. 现在,我完全糊涂了! 提示 所以,我试图改变我的输入文件的终端方式(以前的ISO-8859-1,现在是utf-8)并改变了一些东西: 1 - Python 2.4.6 (#1,"credits" or "license" for more information. 4 - >>> import sys 5 - >>> sys.getdefaultencoding() 6 - 'utf-8' 7 - >>> u'èéò?' 8 - u'xc3xc3xa8xc3xa9xc3xb2xc3xa7' 9 - >>> u'èéò?'.encode('utf-8') 10 - 'xc3xa8xc3xa9xc3xb2xc3xa7' 11 - >>> u'è' 12 - u'xe8' 13 - >>> u'è'.encode() 14 -'xc3xa8' 所以,编码(显式编码)独立于输入编码工作(或者在我看来,但我已经坚持了几天,所以也许我搞砸了我的想法). 解决方案在哪里? 通过查看背景和提示的第8行,您可以看到创建的unicode对象存在一些差异. “真正的”代码 代码没有什么特别之处:它打开一个html模板,将其放入一个字符串中,用unicode(utf-8ed?wish yes)字符串替换占位符并将其保存到另一个可以从Internet上显示的文件中(是??的,我的“登陆“页面已进入标题utf-8的规格). 最后的问题 鉴于此,有没有人想让我的代码工作? 最后的提示 在用utf-8对象替换占位符之前,如果我插入一个 utf8Obj.encode('latin-1') 我的文件在互联网上完全可见! 感谢那些回答. 编辑1 – 发展工作流程 好的,这是我的开发工作流程: 我有一个该项目的CVS.该项目位于centos OS上.该服务器是64位机器. Python 2.4.6 (#1,15:41:03) [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2 我以这种方式设置Eclipse工作:首选 – >一般 – > WORKSPACE – >文本文件编码:UTF-8 Zope / Plone应用程序运行到同一个服务器上:它提供一些PHP页面. 就这样 EDIT2 这是替换的函数: def _fillTemplate(self,buf): """_fillTemplate(buf)-->str Ritorna il documento con i campi sostituiti con dict_template. """ try: for k,v in self.dict_template.iteritems(): if not isinstance(v,unicode): v=str(v) else: v=v.encode('latin-1') #In that way it works,but why? buf = buf.replace(k,v) 解决方法
当你回答我的评论时,这是第一个问题的答案:
不,这并不奇怪:您必须区分Python编码,shell编码,系统编码,文件编码,声明文件编码和应用编码.做了很多编码,不是吗? sys.getdefaultencoding() 这将为您提供Python用于unicode实现的编码.这与输出无关. In [7]: u'è' Out[7]: u'xe8' In [8]: u'è'.encode('utf8') Out[8]: 'xc3xa8' In [9]: print u'è' è In [10]: print u'è'.encode('utf8') è 当您使用print时,caracter会打印到屏幕上,否则,Python会为您提供一个可以复制/粘贴以获取相同数据的表示. 由于unicode字符串与utf8字符串不同,因此它不会为您提供相同的数据. Unicode是字符串的“中性”表示,而utf8是编码的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |