没有显示cx_freeze和utf-8字符的问题

时间:2011-08-18 01:16:49

标签: python utf-8 cx-freeze

我正在尝试编译包含西班牙语字符串的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

correct output

运行.exe

cx_freeze output

编辑:

冷冻机械测试源

frozen Machin test source

1 个答案:

答案 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维护者报告问题(带有这个答案的链接)。