如何在python中编码/解码\ xbe?

时间:2016-11-14 21:46:14

标签: python encoding

我有一个excel文件,我正在使用xlrd模块在python中读取。我从每一行中提取值,添加一些额外的数据并将其全部写入新的文本文件。但是,我遇到了包含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?

2 个答案:

答案 0 :(得分:1)

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

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'

答案 1 :(得分:0)

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

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