我将项目中的每个 py 脚本编码为 utf-8,因为我们肯定会将我们的应用程序从 Jython 2.2.1 迁移到 Jython 2.5.2。#encoding=utf-8
出于这个原因,我在每个 py 文件(
问题出现在包含字符串的脚本中straße
,因为它会自动转换为straße
.
我怀疑这种变化是由 Pydev 引起的,还是因为 utf-8 不涵盖这种字符而发生的。对于我尚未检测到的其他“奇怪”字符串,我能做些什么来自动避免这个问题?
您确定您的 .py 文件使用 UTF-8 编码吗?尝试使用 WebBrowser(作为文本)打开它并检查各种编码。虽然您看到straße
它似乎ß
是由两个字节编码的(很可能是 UTF-8),但请确保它确实是 UTF-8。
还要检查项目/属性上的 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()
我的猜测是,您在该文件中使用了不同的编码(例如cp1252,这是默认的 windows 编码),当您输入utf-8时,它变成了乱码(所以,实际上并不是 PyDev 造成了乱码,而是事实上它以前是另一种编码)。
当您使用它时,还要确保您还将 Eclipse 的默认编码设置为utf-8(这通常是默认的平台编码)——您可以在首选项 > 常规 > 工作区中执行此操作。
作为说明,我认为最常见的发表评论的方式是#coding: utf-8
, 其次是#-*- coding: utf-8 -*-
(即:not #encoding:utf-8
)——尽管所有这些格式都有效(参见 pep:https ://www.python.org/dev/peps/pep- 0263/ )