簡體   English   中英

UnicodeEncodeError:'ascii'編解碼器無法使用python腳本編碼字符u'\\ u200f'

[英]UnicodeEncodeError: 'ascii' codec can't encode character u'\u200f' with python script

我正在使用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

tldr:您可以刪除角色,並希望沒有其他潛伏者。 但是,您確實需要了解該角色及其同類來自何處。 是數據損壞,輸入錯誤,轉換錯誤嗎?

1:您應該真正嘗試使用python 3。

2:這類似於這個問題

您的問題是unicode的功能。 最初有ASCII,任何人都需要128個字符。

然后,一些聰明人看到一個字符的8位將給他們256個字符,因此誕生了代碼頁,其中不同的系統將128-256個字符用作其他語言的符號和字母。 一切都很好,直到人們想要在一個文件中代表一種以上的語言,或者天堂禁止使用一種具有超過256個符號的語言。

然后其他一些聰明的人說使用更多的位! 但是有多少16個,32個? 但是,如果我不希望文件大小增加一倍或兩倍,該怎么辦? 更聰明的人說“簡單,我們將使用編碼”,因此誕生了utf-8和ISO 8859-1及其同類產品。 更聰明的人說,讓每個字符和符號都具有一個真實的值和數字,從而誕生了unicode。

'\\ u200f'是一個unicode字符,指示從右到左顯示的文本。 它沒有等效的鍵盤。
str(row [0])試圖將您的數據轉換為標准的ascii字符串,並且假定每個字符都可以用8位值寫入。 'u200f'的十進制值為8,207。 要解決您的問題,您需要顯式選擇類似utf-8的編碼,以便您的字符串可以可讀的方式進行轉換。 Python 3默認為您提供unicode字符串。 只是說。

您的數據庫正在接受unicode,因此您需要先了解原因,然后再開始刪除令人討厭的字符

查閱Joel Spolsky的這篇文章, 絕對絕對是每個軟件開發人員絕對肯定要了解Unicode和字符集(無借口!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM