【问题标题】:Python: Unicode literal functions?Python:Unicode 文字函数?
【发布时间】: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


【解决方案1】:

假设 UTF-8:

print ["る"], type("る")  # ['\xe3\x82\x8b'] <type 'str'>
print ["る".decode("utf-8")], type("る".decode("utf-8"))  # [u'\u308b'] <type 'unicode'>
print [u"る"], type(u"る")  # [u'\u308b'] <type 'unicode'>

我认为您得到的 \xe4 是因为它是一个字符串,您需要将其转换为 unicode。
这实际上就是您将 "xe4" 替换为 u"00e4" 时所做的事情。

【讨论】:

  • 我的数据从 SQL 中提取到一个元组中,转换为字符串,清理所有数据,替换为 Unicode 字符,然后转换回来。这个修复看起来很容易。它可以与我现有的这个非常丑陋和低效的系统一起使用吗?如果它跳过 tuple > string > clean > tuple fiasco 那会很棒。
  • 抱歉,我不确定我是否关注。为什么必须将整个元组转换为字符串?将tuple 转换为list(使其变得可变)然后执行for i in range(0, len(list)): list[i] = list[i].decode("utf-8") 然后将其转回tuple 怎么样?
  • 如前所述,我不得不强制解决。我没有太多时间,所以效率很低。 .replace 需要字符串 iirc,所以是的。我愚蠢的解决方案很糟糕。如果您的解决方案有效,那就太棒了!我一定会尽快尝试的。
猜你喜欢
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多