2015-01-12 29 views
2

我的國家語言是波蘭語。如何將帶有國家字符的Linux Python 3.4代碼轉換爲Windows中的可執行代碼

我已經在Python 3.4中編寫了我在linux上編寫的程序。該計劃主要針對文本,波蘭語文本。所以當然,變量名沒有任何特殊字符,但有時我會在其中放入一些帶波蘭字符的字符串,用戶將從鍵盤輸入一些帶有波蘭字符的字符串,並從文件中讀取我的程序,其中我用波蘭字符。

在Linux上一切正常。我沒有考慮編碼,它只是工作。但是現在我想讓它在Windows上工作。你能幫助我理解,我該怎麼做才能做出這種轉變?

或者,也許一些解決方法 - 我只需要有Windows可執行文件。完美的方式,這將是「Pyinstaller」,但它只適用於Python 2.7,而不是3.4。這就是爲什麼我想讓它在Windows上工作,並且在VirtualBox中用py2exe編譯成可執行形式。但是也許somone在Linux中知道這個方法,但是沒有這個編碼問題,它會很棒。

如果不是,我回到我的問題。我試圖將gedit中的python腳本轉換爲ISO或CP1250或1252,我在文件標題中寫了我正在使用的編碼,它實際上工作了一點,現在我的Windows錯誤將我轉換成文本形式的文件,一些數據,所以我也轉換了它們......但它不起作用。

所以我決定,沒有更多的時間盲目試用,我需要尋求幫助,我需要了解在Windows上使用哪種編碼,在Linux上,將一個轉換爲另一個的最佳方式是什麼,以及如何讓程序以正確的方式讀取字符。

最好的辦法是 - 我猜 - 沒有改變編碼的任何東西,但只是讓Windows Python瞭解我使用的是什麼編碼。那可能嗎?

對於我的問題的完整答案會很棒,但任何能夠指引我正確方向的東西也會對我有所幫助。


好的。我不確定,如果我理解你在評論中的回答,但是嘗試通過郵件爲自己發送文本,在virtualbox中將其應用於記事本並保存爲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> 
+0

的無論在哪個平臺上運行,Python 3.x的默認源編碼[是UTF-8](https://www.python.org/dev/peps/pep-3120/),因此不需要轉換任何東西在所有。如果你的代碼在Windows和Linux上運行不同,你的問題就在別處。 –

回答

0

正如在評論中提到由零比雷埃夫斯:爲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(因爲 「的UnicodeDecodeError」!),但它遇到非法字符(0x9d是不是一個有效的char是UTF8)。要診斷問題,一臺Linux機器上使用iconv(1),檢測錯誤買做一次空轉換:

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

您可以嘗試創建一個非常簡單的Python文件,通常重現該問題:print "test €uro encoding"

相關問題