1

スペイン語の文字列を含む python スクリプトをコンパイルしようとしています。

.py を実行すると、正しく表示されます。コンパイルは正常に実行されますが、結果の .exe を実行すると、ASCII 以外の文字がエラー文字に置き換えられ、エラーは報告されません。

同じ問題について尋ねている人を見つけることができませんでした。コンパイルしようとしているのは私だけですか、それともコンパイルに何かが欠けていますか?

Win XPでcx_freeze 4.2.1でpython 3.1.2を使用しています。この問題は、基本的なコンパイル (\Scripts\cxfreeze) と高度なコンパイル (setup.py) で一貫しています。

テストコード、main.py

# coding=UTF-8
print('mensaje de prueba \u00e1ñ ó \xf1')

実行中の.py

正しい出力

実行中の.exe

cx_freeze 出力

編集:

冷凍マシン テスト ソース

冷凍マシン テスト ソース

4

1 に答える 1

1

確かなことは言えませんが、ソースファイルにあるように見えるものと表示されているように見えるものは、送信時に変形していないと仮定すると、問題は次のとおりです。

(a-acute、n-tilde、o-acute) が表示されることを期待していますが、実際には「エラー文字」(改行なしスペース、別名 NBSP、通貨記号、セント記号) が表示されます。

私はcxfreezeを持っていません。私の推測では、cxfreeze は出力を二重にエンコードしています。これは、Windows 7 で Python 3.2.0 を使用して次のソース ファイルを実行することに基づいています。ソース エンコーディングの問題によるノイズを排除するために、テキスト文字にエスケープ シーケンスを使用していることに気付くでしょう。

# coding: ascii ... what you see is what you've got.
# expected output: a-acute(e1) n-tilde(f1) o-acute(f3)
import sys
import unicodedata as ucd
text = '\xe1\xf1\xf3'
print("expected output:")
for c in text:
    print(ascii(c), ucd.name(c))
print("seen output[%s]" % text)
sse = sys.stdout.encoding
print(sse)
print("Expected raw bytes output:", text.encode(sse))
whoops = text.encode(sse).decode('latin1')
print("whoops:")
for w in whoops:
    print(ascii(w), ucd.name(w))

ここにその出力があります。

expected output:
'\xe1' LATIN SMALL LETTER A WITH ACUTE
'\xf1' LATIN SMALL LETTER N WITH TILDE
'\xf3' LATIN SMALL LETTER O WITH ACUTE
seen output[áñó]
cp850
Expected raw bytes output: b'\xa0\xa4\xa2'
whoops:
'\xa0' NO-BREAK SPACE
'\xa4' CURRENCY SIGN
'\xa2' CENT SIGN

「表示された出力」の後の括弧内に、予想どおり a-acute、n-tilde、および o-acute が表示されます。cxfreezing を使用して、または使用せずにスクリプトを実行し、表示された内容を (言葉で) 報告してください。凍結された「表示された出力」が実際にスペースの後に通貨記号とセント記号が続く場合は、問題を (この回答へのリンクとともに) cxfreeze メンテナに報告する必要があります。

于 2011-08-21T00:31:54.503 に答える