gpt4 book ai didi

python - cx_freeze 和 utf-8 字符未显示的问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:44 25 4
gpt4 key购买 nike

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

编辑:

卡住 Machin 测试源

frozen Machin test source

最佳答案

不可能确定,但​​假设源文件中的内容和显示的内容在传输中没有发生变形,那么您的问题是:

您期望看到 (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 维护者报告该问题(带有指向此答案的链接)。

关于python - cx_freeze 和 utf-8 字符未显示的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7101342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com