2013-02-22 57 views
0

我将我的项目中的每个py脚本编码为utf-8,因为我们肯定将我们的应用程序从Jython 2.2.1迁移到Jython 2.5.2。出于这个原因,我在每个py文件的第一行添加了一个'魔术注释'(#encoding=utf-8),并且我已经开始通过在Eclipse中调试应用程序来测试一切是否正常。编码 - Pydev自动更改字符

问题出现在包含字符串straße的脚本中,因为它会自动转换为straße

我的疑问是,如果这种变化是由Pydev引起的,或者它发生是因为utf-8不包括这类字符。 我能做些什么来自动避免这个问题,我还没有发现其他'奇怪的'字符串?

回答

0

你确定你的.py文件使用UTF-8编码吗?尝试用WebBrowser(作为文本)打开它并检查各种编码。虽然你看straße如果看起来ß是由两个字节(最可能的是UTF-8)编码,但确保它确实是UTF-8。

另请检查Project/Properties上的Eclipse设置。有“文本文件编码”设置的资源面板(我只使用Eclipse的Java项目,不知道Pydev是否使用此设置)。

尝试这种代码的PyDev并检查结果文件包含UTF-8文本:

# -*- coding: utf8 -*- 

import codecs 

f = codecs.open('strasse.txt', 'wb', 'UTF-8') 
f.write('straße'.decode('UTF-8')) 
f.close() 
0

我的猜测是,你在该文件(比如CP1252有不同的编码,这是默认的Windows编码),当你把utf-8变成了乱码(所以,PyDev并不是真的把它弄乱了,但事实上它以前是在另一种编码中)。

当你在它,也请确保您还设置Eclipse的默认编码UTF-8(通常是默认的平台编码) - 你可以在首选项>常规>工作空间做到这一点

作为一个说明,我认为把该意见的最常见的方式是#coding: utf-8,其次是#-*- coding: utf-8 -*-(即:不#encoding:utf-8) - 尽管所有这些格式的工作(见PEP:https://www.python.org/dev/peps/pep-0263/