如何将带有国家字符的Linux Python 3.4代码转换为Windows中的可执行代码

时间:2015-01-12 12:05:32

标签: linux windows encoding cross-platform python-3.4

我的国语是波兰语。

我在Python 3.4中编写了程序,我在linux上编写。该程序主要用于文本,波兰语文本。所以当然,变量名称没有任何特殊字符,但有时我会在其中添加一些波兰语字符串,用户将从键盘输入一些波兰语字符串和我的程序从文件中读取,我在其中输入波兰语字符串

一切都在Linux上运行良好。我没有考虑编码,它只是起作用。但现在我想让它在Windows上运行。你能帮助我理解,我应该做些什么来实现这种转变?

或者也许是一些解决方法 - 我只需要拥有Windows可执行文件。完美的方式,将是“Pyinstaller”,但它只适用于python 2.7,而不是3.4。这就是为什么我想让它在Windows上运行,在VirtualBox中用py2exe编译成可执行的形式。但也许在Linux中,有人知道这种方式,没有这种编码问题,它会很棒。

如果没有,我回到我的问题。我试图将gedit中的python脚本转换为ISO或CP1250或1252,我在文件标题中写了我正在使用的编码,它实际上工作了一点,现在我的Windows错误将我打包到我的文件中,我阅读了文本形式一些数据,所以我也转换了它们......但它没有用。

所以我决定,现在已经没有时间进行盲目试验了,我需要寻求帮助,我需要了解Windows上使用的编码,在linux上,将一个转换为另一个的最佳方法是什么,以及如何让程序以正确的方式读取字符。

最好的方法是 - 我猜 - 不改变编码中的任何内容,只是让windows python了解我正在使用的编码。这可能吗?

我的问题的完整答案会很棒,但任何能指明我正确方向的事情也会对我有所帮助。


行。我不确定,如果我在评论中理解你的答案,但是尝试通过邮件为自己发送文本,将它在虚拟箱中处理到记事本中并保存为utf_8。仍然收到此消息:

C:\Users\python\Documents>py pytania.py
Traceback (most recent call last):
  File "pytania.py", line 864, in <module>
    start_probny()
  File "pytania.py", line 850, in start_probny
    utworzenie_danych()
  File "pytania.py", line 740, in utworzenie_danych
    utworzenie_pytania_piwo('a')
  File "pytania.py", line 367, in utworzenie_pytania_piwo
    for line in f:                  # Czytam po jednej linii
  File "C:\Python34\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1134: cha
racter maps to <undefined>

1 个答案:

答案 0 :(得分:1)

正如Zero Piraeus在评论中所提到的: Python 3.x的默认源代码是UTF-8,无论它在哪个平台上运行......

如果您遇到问题,可能是因为您的源代码编码错误。你应该只坚持使用UTF-8(即使PEP 0263 -- Defining Python Source Code Encodings允许更改它)。

您提供的错误消息很明确:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1134

Python目前期待UTF8(因为&#34; UnicodeDecodeError&#34;!),但它遇到非法字符(0x9d不是有效字符是UTF8)。要诊断问题,请在Linux计算机上使用iconv(1),以检测错误购买进行虚拟转换:

iconv -f utf8 -t iso8859-2 -o /dev/null < test.py

您可以尝试通过创建一个非常简单的python文件来重现该问题,通常是:print "test €uro encoding"