UnicodeEncodeError:'latin-1'编解码器在运行exe程序时无法编码字符

时间:2012-03-19 12:21:05

标签: unicode exe codec

我试图在海外的计算机上运行现有程序。当我单击以运行.exe程序时,它会指示查看日志文件。查看日志文件时,它说:

追踪(最近的呼叫最后):
  模块中的文件“itchycats.py”,第1249行   在主要文件中输入“itchycats.py”,第808行   在GetProfileInfo中输入文件“itchycats.py”,第326行   在get_user_shell文件夹中输入文件“sabnzbd \ misc.pyo”,第281行 UnicodeEncodeError:'latin-1'编解码器无法编码位置40-41中的字符:序数不在范围内(256)

我一直在搜索这个UnicodeEncodeError:'latin-1',我能编辑程序代码,即使我没有创建它。我没有python或我在线程上阅读的任何其他软件讨论'unicodeencodeerror'我可以运行什么来让我的电脑运行这个程序。我从来没有在其他电脑上遇到过问题,但这是台湾借用的惠普笔记本电脑。窗口是非多语言版本,因此我无法将其更改为英语(这就是为什么我认为我收到此错误)。除了在亚洲度过我的一周,学习如何成为一名程序员,有没有正确运行该软件的提示?

1 个答案:

答案 0 :(得分:1)

sabnzbd无法在ISO 8859-1中不存在的shell文件夹路径中包含字符的任何计算机上正常工作。

misc.py中发生错误:

name, value, val_type = _winreg.EnumValue(key, i)
values[name] = value.encode('latin-1')

这有点傻。 Windows将用于字节字符串文件名的编码('代码页')是'ANSI代码页',它只是喜欢 ISO 8859-1('latin-1')on西欧的机器,甚至不完全一样。

正确的编码是'mbcs',它会复制该代码页,无论它设置为什么。但是,如果你的shell文件夹中包含不符合ANSI代码页的字符,那么这仍然无效。

正确的答案是单独保留Unicode字符串,不要将其编码为字节。 Python for Windows对本机Unicode文件名有很好的支持(这是一个很棒的功能;它是极少数跨平台语言之一)。说服sabnzbd devs删除这些编码内容,只使用Unicode字符串。