You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建包含文本的ndarray时如何让numpy忽略UnicodeEncode错误?

报错原因

你指定dtype='S'时,numpy会默认用ASCII编码将字符串转换为字节序列,而你从PDF提取的文本中包含ASCII编码不支持的特殊Unicode字符(如你遇到的\uf009),因此触发编码错误。


解决方法1:确实需要生成字节类型的numpy数组(对应你原来的dtype='S'需求)

先手动对字符串做编码,编码时指定忽略无法转换的字符,再传入numpy创建数组:

import pdfplumber
import numpy as np

with pdfplumber.open('C:/Users/hasan/simsani/Invoices/Invoice SB14082021-1.pdf') as pdf:
    first_page = pdf.pages[0]
    b = first_page.extract_text()

# 手动编码,忽略不可转换的字符,用ascii编码会丢弃所有非ASCII字符
encoded_b = b.encode('ascii', errors='ignore')
c = np.array(encoded_b, dtype='S')

如果需要保留中文等非ASCII字符,可以把编码替换为utf-8,不会丢失合法的多字节字符:

encoded_b = b.encode('utf-8', errors='ignore')
c = np.array(encoded_b, dtype='S')

解决方法2:不需要字节类型,直接用支持Unicode的字符串数组

不需要指定dtype='S',numpy默认的字符串类型原生支持所有Unicode字符,不会触发编码错误,也不会丢失任何字符,更推荐绝大多数场景使用:

import pdfplumber
import numpy as np

with pdfplumber.open('C:/Users/hasan/simsani/Invoices/Invoice SB14082021-1.pdf') as pdf:
    first_page = pdf.pages[0]
    b = first_page.extract_text()

c = np.array(b)

内容的提问来源于stack exchange,提问作者user16777790

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:48:03