UnicodeEncodeError:' ascii'编解码器不能对位置0-2中的字符进行编码:序数不在范围内(128)

时间:2016-12-26 09:26:13

标签: python numpy encoding

我试图编写相当复杂的Python程序,但它主要完成了。我只是处理了一小部分细节。

有问题的代码部分是:

newData = kmeans.sampleNewData(200, means, covariances, priors)

newData = newData.astype(str)
...loops and logic and stuff...
newData[i, j] = columnsList[j][(indexList[j]).index(closestFit)]

基本上,newData是一个numpy矩阵大小200乘4,填充了float类型的数字。然后我使用astype方法将它们转换为字符串。

然后我尝试将这个字符串columnsList[j][(indexList[j]).index(closestFit)]放入newData的条目中。

问题是columnsList[j][(indexList[j]).index(closestFit)]不一定是英语。例如,它可能是希伯来语。在这种情况下 - 我收到错误

  

UnicodeEncodeError:' ascii'编解码器不能对位置0-2中的字符进行编码:序数不在范围内(128)

值得注意的是,我已经编写了# -*- coding: utf-8 -*-,因此我们使用utf-8编码,当我打印columnsList[j][(indexList[j]).index(closestFit)]时,它确实打印了正确的值。所以我们可以打印出来。但出于某种原因,我无法将其放入newData矩阵。

1 个答案:

答案 0 :(得分:0)

当您尝试将某些字符串类型转换为字节时,编码就是操作。看来,您的columnsList[j][(indexList[j]).index(closestFit)]包含Unicode字符串,请尝试

newData[i, j] = columnsList[j][(indexList[j]).index(closestFit)].encode('utf-8')

代替。