【发布时间】:2017-11-28 04:42:25
【问题描述】:
最近,我的脚本在扩展到非英语语言时遇到了问题,其中重音字符(等)在打印或保存到文件时会改为显示为 \xe4。
为了解决这个问题,我想出了一个短期解决方案,将 "xe4" 替换为 u"00e4"。再做几处改动后,这个小作弊奏效了,但又长又丑,需要我在遇到它时定义每个字符,这意味着我必须一遍又一遍地重用相同的大量替换行代码块。这些数据也存储在一个元组中,有时可能是半问题。
有没有一种简单的方法来保证这种方法的未来发展?有没有人写过一个函数或更好的方法来解决这个问题?我的系统在 Python 2.7.5 上运行
【问题讨论】:
-
非 ASCII 字符从何而来?通常,您希望将输入转换为尽可能靠近输入源或进程的 Unicode,并在输出期间从 Unicode 转换为目标编码。这要求您知道(或控制)输入和输出使用的编码。
-
你能提供一个最小的、可验证的、完整的例子吗?
-
@rd_nielsen 数据来自多个 MySQL 表。我们将表格混合在一起,以便数据相关且适合使用。我记得,所有数据都在表中的 UTF-8 字符集中,然后在 chcp1292 脚本中编码为(我相信)是必要的。
-
您应该明确确定表格中使用的编码。还应控制这些表的输入,以便各种编码的输入都正确转换为数据库编码。 (cp1292 是否正确?--我找不到对该编码的引用。)
-
@rd_nielsen 我已经在表中进行了相当多的编码以尝试解决这个问题,但我确定我最后一次检查的是 UTF-8。通过 Python 脚本输入表格,我什至还没有考虑过查看该脚本。这可能是一个想法。是的,它是 chcp/cp/windows1292。当我最初解决这个问题时,这似乎最适用于 Amazon 和 Excel。
标签: python unicode set character literals