Python编码 – 有什么解释吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python编码 – 有什么解释吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4223字,纯文字阅读大概需要7分钟。
内容图文
![Python编码 – 有什么解释吗?](/upload/InfoBanner/zyjiaocheng/761/c21a125d39b840db8d0d750652611251.jpg)
有人可以向我解释为什么python有这种行为吗?
我来解释吧.
背景
我有一个python安装,我想使用一些不在ASCII表中的字符.
所以我改变了我的python默认enconding.
我将每个字符串保存到文件.py中,以这种方式’_MAIL_TITLE_’:u’Бронированиеномеров’,
现在,使用替换我的字典键的方法,我想以动态的方式将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'\xe8\xe9\xf2\xe7'
9 - >>> u'èéò?'.encode('utf-8')
10 - '\xc3\xa8\xc3\xa9\xc3\xb2\xc3\xa7'
11 - >>> u'è'
12 - u'\xe8'
13 - >>> u'è'.encode()
14 - '\xc3\xa8'
题
看看[7-10]行.
这不是很奇怪吗?为什么我的(第6行)python有一个defaultencoding utf-8,它是否以与第9行不同的方式转换该字符串(line7)?
现在,看看第[11-14]行及其输出.
现在,我完全糊涂了!
提示
所以,我试图改变我的输入文件的终端方式(以前的ISO-8859-1,现在是utf-8)并改变了一些东西:
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'\xc3\xc3\xa8\xc3\xa9\xc3\xb2\xc3\xa7'
9 - >>> u'èéò?'.encode('utf-8')
10 - '\xc3\xa8\xc3\xa9\xc3\xb2\xc3\xa7'
11 - >>> u'è'
12 - u'\xe8'
13 - >>> u'è'.encode()
14 -'\xc3\xa8'
所以,编码(显式编码)独立于输入编码工作(或者在我看来,但我已经坚持了几天,所以也许我搞砸了我的想法).
解决方案在哪里?
通过查看背景和提示的第8行,您可以看到创建的unicode对象存在一些差异.
所以,我开始考虑它了.
我总结了什么?没有.
没有什么,除了那个,也许,我的编码问题一旦保存我的.py(包含所有必须插入到html文档中的utf-8字符)的文件编码
“真正的”代码
代码没有什么特别之处:它打开一个html模板,将其放入一个字符串中,用unicode(utf-8ed?wish yes)字符串替换占位符并将其保存到另一个可以从Internet上显示的文件中(是??的,我的“登陆“页面已进入标题utf-8的规格).
我这里没有代码,因为它分散在几个文件中,但我确信该程序的工作流程(通过跟踪它).
最后的问题
鉴于此,有没有人想让我的代码工作?
关于unix文件编码的想法?或.py文件编码?
如何更改编码以使我的代码有效?
最后的提示
在用utf-8对象替换占位符之前,如果我插入一个
utf8Obj.encode('latin-1')
我的文件在互联网上完全可见!
感谢那些回答.
编辑1 – 发展工作流程
好的,这是我的开发工作流程:
我有一个该项目的CVS.该项目位于centos OS上.该服务器是64位机器.
我使用eclipse将代码开发成Windows 7(64位).
每次修改都只在CVS提交时提交.
代码是使用那种python的Centos机器上的代码:
Python 2.4.6 (#1, Jan 27 2012, 15:41:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
我以这种方式设置Eclipse工作:首选 – >一般 – > WORKSPACE – >文本文件编码:UTF-8
Zope / Plone应用程序运行到同一个服务器上:它提供一些PHP页面.
PHP页面通过WS调用一些位于Zope / Plone“服务器”上的python方法(应用程序逻辑).该服务器直接连接到应用程序逻辑.
就这样
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)
解决方法:
当你回答我的评论时,这是第一个问题的答案:
Take a look to line [7-10]. Isn’t weird? Why if my (line 6) python
have a defaultencoding in utf-8, then convert that string (line7) in a
different way that line 9 does? Now, take a look to lines [11-14] and
their output..
不,这并不奇怪:您必须区分Python编码,shell编码,系统编码,文件编码,声明文件编码和应用编码.做了很多编码,不是吗?
sys.getdefaultencoding()
这将为您提供Python用于unicode实现的编码.这与输出无关.
In [7]: u'è'
Out[7]: u'\xe8'
In [8]: u'è'.encode('utf8')
Out[8]: '\xc3\xa8'
In [9]: print u'è'
è
In [10]: print u'è'.encode('utf8')
è
当您使用print时,caracter会打印到屏幕上,否则,Python会为您提供一个可以复制/粘贴以获取相同数据的表示.
由于unicode字符串与utf8字符串不同,因此它不会为您提供相同的数据.
Unicode是字符串的“中性”表示,而utf8是编码的.
内容总结
以上是互联网集市为您收集整理的Python编码 – 有什么解释吗?全部内容,希望文章能够帮你解决Python编码 – 有什么解释吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。