我正在尝试编译包含西班牙语字符串的python脚本。
如果我运行.py,它会正确显示。编译运行正常,但是当我运行生成的.exe时,非ascii字符被替换为错误字符,并且没有报告错误。
我找不到有人问同样的问题,我是唯一一个试图编译的人还是我在编辑中遗漏了什么?
我在win xp上使用python 3.1.2和cx_freeze 4.2.1。问题在于基本编译(\ Scripts \ cxfreeze)和高级(setup.py)
测试代码,main.py
# coding=UTF-8
print('mensaje de prueba \u00e1ñ ó \xf1')
运行.py
运行.exe
编辑:
冷冻机械测试源
答案 0 :(得分: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
在“看到输出”之后的括号中,我看到了如预期的急性,正向和超急性。请使用和不使用cxfreezing运行脚本,并报告(以文字表示)您看到的内容。如果冻结的“看到的输出”实际上是一个空格,后面跟着一个货币符号和一个分号,你应该向cxfreeze维护者报告问题(带有这个答案的链接)。