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

从numpy.object解码非ASCII字符时遇UnicodeEncodeError问题求助

解决numpy.object类型转字符串时的非ASCII字符编码错误

问题代码与报错

执行以下代码处理中文等非ASCII字符时:

import numpy as np

sentence = ['世界']

a = np.array(sentence, dtype=object).reshape(-1)

b = [sentence for sentence in np.char.decode(a.astype(np.bytes_), 'UTF-8')]

触发报错:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

原因分析

a.astype(np.bytes_)在将object类型的字符串转换为bytes时,默认使用ASCII编码,而中文等非ASCII字符超出ASCII编码范围,因此抛出编码错误。

解决方案

方案一:直接提取原字符串(最简方法)

object类型的numpy数组本身存储的就是原生Python字符串,无需额外编码解码,直接转列表即可:

import numpy as np

sentence = ['世界']
a = np.array(sentence, dtype=object).reshape(-1)
b = list(a)  # 结果为['世界']

方案二:显式编码后再解码(适合必须转bytes的场景)

如果业务逻辑要求必须经过bytes转换,需先显式用UTF-8编码字符串,再转numpy的bytes数组,最后解码:

import numpy as np

sentence = ['世界']
a = np.array(sentence, dtype=object).reshape(-1)
# 先将每个字符串编码为UTF-8 bytes,再构建numpy数组
bytes_array = np.array([s.encode('UTF-8') for s in a], dtype=np.bytes_)
# 解码回字符串并转列表
b = np.char.decode(bytes_array, 'UTF-8').tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:03:19