python中文编码是什么_Python编码有什么解释吗?

有人能解释一下python为什么有这种行为吗?在

让我解释一下。在

背景

我有一个python安装,我想使用一些不在ASCII表中的字符。

所以我改变了python的默认编码。

我将每个字符串保存到一个file.py中,这样'_MAIL_TITLE_': u'Бронирование номеров',

现在,有了一个替换字典键的方法,我想以动态的方式将字符串插入到html模板中。在

我在html页面的标题中放置:

......

不幸的是,我的html文档(在这些替换之后)被一些错误的字符(未转换?误解了吗?)在

所以,我打开一个终端开始订购:

^{pr2}$

问题

看看第[7-10]行。

这不是很奇怪吗?为什么如果我的(第6行)python有一个defaultencoding utf-8,那么它是否以与第9行不同的方式转换该字符串(第7行)?

现在,看看行[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'

所以,编码(显式编码)独立于输入编码工作(或者在我看来,但是我已经坚持了好几天了,所以可能我把脑子搞乱了)。在

解决方案在哪里??

通过查看background和hint的第8行,可以看到所创建的unicode对象有一些不同之处。

所以,我开始考虑这个问题。

我得出了什么结论?没有什么。

除了,也许我的编码问题是在save my.py(包含必须插入到html文档中的所有utf-8字符)之后,我的编码问题就变成了到文件的编码中了

“真实”代码

这段代码没有什么特别之处:它打开一个html模板,将其放入一个字符串中,用unicode(utf-8ed?)替换占位符?希望是)字符串,并将其保存到另一个文件中,该文件将从互联网上可视化(是的,我的“登陆”页面已经进入了标题utf-8的规范中)。

我这里没有代码,因为它分散在几个文件中,但是我可以确定程序的工作流程(通过跟踪它)。在

最后一个问题

有鉴于此,有人知道如何让我的代码工作吗?

关于unix文件编码的想法?还是.py文件编码?

如何更改编码以使代码正常工作?在

最后提示

在用utf-8对象替换占位符之前,如果我插入utf8Obj.encode('latin-1')

我的文档在互联网上完全可见!在

感谢那些回答的人。在

EDIT1-开发工作流

好吧,这就是我的开发流程:

我有那个项目的简历。该项目位于centos上。那台服务器是一台64位机器。

我用eclipse将代码开发成windows7(64位)。

每个修改只在CVS commit中提交。

在使用这种python的Centos机器上,代码是execute的: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的方式是:首选项->常规->工作区->文本文件编码:UTF-8

Zope/Plone应用程序运行在同一个服务器上:它为一些PHP页面提供服务。

PHP页面通过WS调用位于Zope/Plone“服务器”上的一些python方法(应用程序逻辑)。该服务器直接与应用程序逻辑接口。在

仅此而已

编辑2

这是执行替换的函数: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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值