【问题标题】:How to deal with strings where encoding is unclear如何处理编码不清楚的字符串
【发布时间】:2015-09-13 08:26:26
【问题描述】:

我知道网络上和stackoverflow 上有很多关于 Python 和字符编码的内容,但我还没有真正找到我正在寻找的答案。所以冒着创建重复的风险,我还是要问。

这是一个获取字典的脚本,其中所有键都正确地作为 unicode。这些值是编码未知的字符串。对于键来说,这并不重要,键都非常简单,与值不同。这些值可以(并且确实)包含多种编码。有一些字典,其中一些值是 ASCII 值,另一些是 UTF-16BE,还有一些是 cp1250。

这完全打乱了进一步的处理,目前主要包括打印或连接(是的,就这么简单)。

我想出的使 Python 打印语句正常工作的解决方法是:

for key in data.keys():
   # hope they did not chose a funky encoding
   try:
       print key+":"+data[key] # this triggers a UnicodeDecodeError on many encodings
       current_data = data[key]
   except UnicodeDecodeError:
   # trying to cope with a funky encoding             
        current_data = data[key].decode(chardet.detect(data[key])['encoding']) # doing this on each value, because the dictionary sometimes contains multiple encodings
        print key+":", # printing without newline was a workaround, because connecting didn't work
        print current_data.encode('UTF-8')

在 Python 中,这工作得很好。在我在项目中使用的 Jython 2.7rc1 中(不是切换选项),它打印绝对不是原始编码的字符(看起来很时髦的字符)。如果有人知道我如何使它在 Jython 中也能正常工作,那就太好了!

编辑(示例): 样本值:

Our latest scenarios explore two possible versions of the future seen through fresh “lenses”. 

创建一个字符串,其中左右双引号变为\x8D 和\x8E。我不知道那是什么编码。在 Python 中使用上述代码后,它会剥离它们。在 Jython 中,它会将它们变成白色方块。

【问题讨论】:

标签: python character-encoding jython utf


【解决方案1】:

我不熟悉 Jython,但我发现以下链接可能很有用:http://python.6.x6.nabble.com/character-encoding-issues-td1766833.html

它说您应该将所有 unicode 字符串保存在与源代码不同的文件中,并使用 codecs.open 读取它们。这似乎适用于遇到与您类似问题的人。

以下链接还提到了一些关于为 JVM 指定编码参数的内容:https://answers.launchpad.net/sikuli/+question/156443

没有看到任何实际的错误输出,这是我能提供的帮助范围。

【讨论】:

  • 我打开的文件有时内部似乎有各种编码。我正在阅读的是 PDF 文档信息。
  • 您仍然没有提供足够的信息。在不知道问题究竟是什么的情况下,人们只能猜测问题是什么以及为什么会发生。您是否尝试实施上述链接中的建议?以下是来自 jython.org 的另外两个问题,它们可能与您的问题相似:issue 1841issue 1592
  • 你看到我在主帖下留下的评论了吗?
  • 是的,我做到了。我不是在问你为什么没有提供足够的信息;我只是说没有足够的信息可以帮助您。
猜你喜欢
  • 2012-01-27
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2022-10-30
相关资源
最近更新 更多