Python cx\U冻结和utf-8字符未显示的问题

Python cx\U冻结和utf-8字符未显示的问题,python,utf-8,cx-freeze,Python,Utf 8,Cx Freeze,我正在尝试编译一个包含西班牙语字符串的python脚本 如果我运行.py,它将正确显示。编译运行正常,但当我运行生成的.exe时,非ascii字符将替换为错误字符,并且没有报告错误 我找不到任何人问同样的问题,我是唯一一个试图编译一个ñ的人还是我在编译中遗漏了什么 我正在WinXP上使用python 3.1.2和cx_freeze 4.2.1。在基本编译(\Scripts\cxfreeze)和高级编译(setup.py)中,问题是一致的 测试代码,main.py # coding=UTF-8 p

我正在尝试编译一个包含西班牙语字符串的python脚本

如果我运行.py,它将正确显示。编译运行正常,但当我运行生成的.exe时,非ascii字符将替换为错误字符,并且没有报告错误

我找不到任何人问同样的问题,我是唯一一个试图编译一个ñ的人还是我在编译中遗漏了什么

我正在WinXP上使用python 3.1.2和cx_freeze 4.2.1。在基本编译(\Scripts\cxfreeze)和高级编译(setup.py)中,问题是一致的

测试代码,main.py

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

正在运行.exe

编辑:

冷冻机械试验源


不可能确定,但假设源文件中显示的内容和显示的内容在传输过程中未被转换,您的问题是:

您希望看到(a-acute、n-tilde、o-acute),但实际上看到的是“错误字符”(无空格、货币符号、美分符号)

我没钱。我猜cxfreeze对您的输出进行了双重编码。这是基于在Windows7上使用Python3.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

在“SEED output”后面的括号中,我看到了预期的a-ACURE、n-tilde和o-ACURE。请使用或不使用CXF运行脚本,并报告(用文字)您看到的内容。如果冻结的“可见输出”实际上是一个空格,后跟一个货币符号和一个美分符号,则您应该向cxfreeze维护人员报告问题(带有指向此答案的链接)。

不可能确定,但假设源文件中显示的内容和显示的内容在传输过程中未被转换,则问题在于:

您希望看到(a-acute、n-tilde、o-acute),但实际上看到的是“错误字符”(无空格、货币符号、美分符号)

我没钱。我猜cxfreeze对您的输出进行了双重编码。这是基于在Windows7上使用Python3.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

在“SEED output”后面的括号中,我看到了预期的a-ACURE、n-tilde和o-ACURE。请使用或不使用CXF运行脚本,并报告(用文字)您看到的内容。如果冻结的“可见输出”实际上是一个空格,后跟一个货币符号和一个美分符号,您应该向cxfreeze维护人员报告问题(带有指向此答案的链接)。

事实上,一旦冻结,此源还会在括号内显示错误字符。我希望有这么多的开发人员知道这方面的情况,但下周我将尝试使用该项目的邮件列表。我会让这个悬赏在本周剩下的时间里公开,以防有人看到解决方案it@Einacio:是否显示相同的“错误字符”?如果没有,说明了什么?什么是冻结的
sys.stdout.encoding
。从纯源代码执行显示编码:cp850,具有正确的输出,Bounty将为您提供帮助。我将尝试将问题发布到cx_冻结中。感谢事实上,一旦冻结,该源代码也会在括号内显示错误字符。我希望有这么多的开发人员知道这方面的情况,但下周我将尝试使用该项目的邮件列表。我会让这个悬赏在本周剩下的时间里公开,以防有人看到解决方案it@Einacio:是否显示相同的“错误字符”?如果没有,说明了什么?什么是冻结的
sys.stdout.encoding
。从纯源代码执行显示编码:cp850,具有正确的输出,Bounty将为您提供帮助。我将尝试将问题发布到cx_冻结中。谢谢