unicode - Openpyxl Unicode 解码错误无法从单元格值中删除 \ufeff
问题描述
我正在解析多个 unicode 数据工作表并为每个工作表中的特定单元格创建一个字典,但我无法解码 unicode 数据。代码的小片段如下
for key in shtDict:
sht = wb[key]
for row in sht.iter_rows('A:A',row_offset = 1):
for cell in row:
if isinstance(cell.value,unicode):
if "INC" in cell.value:
shtDict[key] = cell.value
本节的输出是:
{'60071508': u'\ufeffReason: INC8595939', '60074426': u'\ufeffReason. Ref INC8610481', '60071539': u'\ufeffReason: INC8603621'}
我尝试根据Python string 中的 u'\ufeff'正确解码数据,方法是将最后一行更改为:
shtDict[key] = cell.value.decode('utf-8-sig')
但我收到以下错误:
Traceback (most recent call last):
File "", line 55, in <module>
shtDict[key] = cell.value.decode('utf-8-sig')
File "C:\Python27\lib\encodings\utf_8_sig.py", line 22, in decode
(output, consumed) = codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 0: ordinal not in range(128)
不知道问题是什么,我也尝试过使用“utf-16”进行解码,但我得到了同样的错误。有人能帮忙吗?
解决方案
只是让它更简单:您可以忽略 BOF,所以只需忽略 BOF 字符。
shtDict[key] = cell.value.replace(u'\ufeff', '', 1)
注意:cell.value
已经是 unicode 类型(你刚刚检查过),所以你不能再次解码它。
推荐阅读
- scrapy - 需要将 Scrapy 回调方法数据返回给调用函数
- javascript - 如何将 hexlified 二进制数据转换为 unicode 字符串
- javascript - 使用过滤器过滤数据表中的特定月份
- intellij-idea - Scalatest 在 Intellij 中与 Scala 2.13.0 一起工作需要什么?
- networking - 如何使用 nodejs 应用程序在两个 pod 之间进行通信
- swift - 当应用程序被“杀死”时,尝试将我的计时器保存到 UserDefaults
- powershell - 读取 CSV 文件,然后拆分值并创建一个全局变量
- sql - 附加查询将数据相乘
- python - Flask - 将列表传递给新视图
- django - 如何从 ddesktop 计算机到我的笔记本电脑继续处理 pycharm 中现有的 django 项目?