关于python:UnicodeEncodeError:’ascii’编解码器不能对位置3中的字符u’ ‘进行编码:序数不在范围内(128)

UnicodeEncodeError: 'ascii' codec can't encode character u'ufffd' in position 3: ordinal not in range(128)

本问题已经有最佳答案,请猛点这里访问。

我收到编码错误:

1
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufffd' in position 3: ordinal not in range(128)

在下面的python(pyspark)代码中,row是数据帧行:

1
2
3
4
5
6
7
def rowToLine(row):
  line = str(row[0]).strip()
  columnNum = 44
  for k in xrange(1, columnNum):
    line = line +"\t"
    line = line + str(row[k]).strip()  # encoding error here
  return line

我还尝试了下面的加入:

1
2
3
def rowToLine(row):
  s ="\t"
  return s.join(row)

但是行的一些值是int,所以我得到了错误:

1
TypeError: sequence item 19: expected string or Unicode, int found

有人知道怎么修理这个吗?谢谢!


谢谢大家的建议!

我基本上接受了PadraicCunningham的想法,并做了一些修改来处理int case。下面的代码有效。

1
2
3
def rowToLine(row):
  s ="\t"
  return s.join( x.encode("utf-8") if isinstance(x, basestring) else str(x).encode("utf-8") for x in row)