UnicodeEncodeError:'ascii'编解码器无法使用python脚本对字符u'\ u200f'进行编码

时间:2016-07-08 00:18:12

标签: python encoding

我使用python复制字段的一部分并将其复制到另一个字段(在表中)。它以前工作但现在我得到这个UnicodeEncodeError:

Traceback (most recent call last):
  File "O:\Projects\NetworkAnalyst\Scripts\python\FiretrailsNameToRoadName.py", line 73, in <module>
    elif len(str(row[0]).split()) == 1:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u200f' in position 6: ordinal not in range(128)

如何找出我遇到问题的角色?它是修复它的唯一方法(删除那个角色吗?)

以下是我收到错误的脚本部分:

with arcpy.da.UpdateCursor(input_fc, fields) as cursor:
    for row in cursor:
        counter = counter + 1
        print counter
        #if NULL, paste Unnamed Firetrail
        if (row[0] is None):
            roadNameBase = "Unnamed"
            roadNameType = "Firetrail"
            row[1] = roadNameBase
            row[2] = roadNameType
          #  cursor.updateRow(row)
        #if name is one word, copy over to roadbasename
        elif len(str(row[0]).split()) == 1:
            roadNameBase = row[0]
            roadNameType = "Firetrail"
            row[1] = roadNameBase
            row[2] = roadNameType

1 个答案:

答案 0 :(得分:0)

tldr:你可以删除这个角色,希望没有其他人潜伏。但你真的需要了解这个角色及其同类的来源。数据损坏,输入错误,转换错误吗?

1:你应该尝试使用python 3.它的时间。

2:这类似于this question

您的问题是unicode的一个功能。一开始有ASCII,所有人都需要128个字符。

然后一些聪明的人看到一个字符的8位将给它们256个字符,因此诞生了代码页,其中不同的系统将使用字符128-256作为符号和字母用于其他语言。一切都很好,直到人们想要在一个文件中代表多种语言,或天堂禁止,这是一种超过256个符号的语言。

然后其他一些聪明的人说使用更多的东西!但有多少16?,32?但是如果我不希望我的文件大小增加一倍或四倍呢?更聪明的人说&#34;简单我们将使用编码&#34;因此诞生了utf-8和ISO 8859-1及其同类。更聪明的人说让我们给每个角色和符号赋予他们唯一的真实价值和数字,从而诞生了unicode。

&#39; \ u200f&#39;是一个unicode字符,表示从右到左显示的文本。它没有等效的键盘 str(row [0])试图将您的数据转换为标准的ascii字符串,并假设每个字符都可以用8位值写入。 &#39; u200f&#39;的小数值为8,207。要解决您的问题,您需要明确选择类似utf-8的编码,以便您的字符串可以以可读的方式进行转换。 Python 3默认为您提供unicode字符串。只是说。

您的数据库正在接受unicode,因此您需要在开始删除有问题的字符之前了解原因

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

上查看Joel Spolsky撰写的这篇文章