【问题标题】:How can I encode/decode \xbe in python?如何在 python 中编码/解码 \xbe?
【发布时间】:2016-11-14 21:46:14
【问题描述】:

我有一个使用 xlrd 模块在 python 中读取的 excel 文件。我从每一行中提取值,添加一些额外的数据并将其全部写入一个新的文本文件。但是,我遇到了包含分数为 3/4 的文本的单元格的问题。 Python将值读取为\xbe,每次遇到都会报这个错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xbe' in position 317: ordinal not in range(128)

我正在将每一行的值列表转换为字符串,尝试了以下操作但没有成功:

row_vals_str = [unicode(str(val), 'utf-8') for val in row_vals]
row_vals_str = [str(val).encode('utf-8') for val in row_vals]
row_vals_str = [str(val).decode() for val in row_vals]

每次我遇到第一次出现的 3/4 分数时,我都会遇到相同的错误。

如何将其转换为可以写入文本的内容?

我遇到了这个帖子,但没有找到答案:How to convert \xXY encoded characters to UTF-8 in Python?

【问题讨论】:

  • 它可能用相当于 latin-1 的编码。但是,您仍然需要对角色做一些有用的事情。
  • 如果遇到 Unicode 问题,最好使用 Python 3。
  • 感谢您的回复,@NickT 不幸的是,我目前无法使用 python 2.7

标签: python encoding


【解决方案1】:

这是 latin-1 组。如果不需要,您可以使用 latin1 来解码字符或替换为不同的字符。

http://www.codetable.net/hex/be

>>> '\xbe'.decode('latin1')
u'\xbe'
>>> '\xbe'.decode('cp1252')
u'\xbe'


>>> '\xbe this is a test'.replace('\xbe','3/4')
'3/4 this is a test'

【讨论】:

  • 感谢您的回复!我尝试了您的第一个和第三个选项,但仍然遇到相同的错误?尽管在第一种情况下,我将其应用于包含 \xbe. 的整个字符串
  • @kflaw 如果第一个解码有效,您可以先解码,然后将“xbe”替换为“3/4”
  • @kflaw 因为 Python 2 鼓励使用草率的 Unicode 处理,这可能是 xlrd 中的一个错误,如果不打补丁就无法修复(您是否阅读过他们关于使用各种文件打开文件的文档?编码?)。你也可以尝试不同的包openpyxl
  • @NickT 感谢您的回复,我认为您对 xlrd 的问题是正确的,我会调查一下
【解决方案2】:

实际上最终的工作是对字符串进行解码,然后对其进行编码,然后替换:

row_vals_str = [str(val).decode('latin1').encode('utf8').replace(r'\xbe', '3/4') for val in row_vals]

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多