2016-07-08 52 views
0

我正在使用python複製部分字段並將其複製到另一個字段(在表中)。它以前工作,但現在我得到這個UnicodeEncodeError:UnicodeEncodeError:'ascii'編解碼器不能使用python腳本編碼字符u' u200f'

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 

回答

0

tldr:您可以刪除字符和希望沒有其他人潛伏。但是你真的需要了解那個角色和流派的來源。它是否損壞了數據,輸入錯誤,轉換錯誤?

1:你應該真的嘗試和使用python 3.它的時間。

2:這與this question相似。

你的問題是unicode的一個功能。在一開始就有ASCII和128個字符是所有人都需要的。

然後一些明亮的人看到8位字符會給他們256個字符,因此誕生了不同的系統會使用字符128-256代替其他語言的符號和字母的代碼頁。直到人們想要在一個文件中表示不止一種語言,或者說天堂禁止使用超過256個符號的語言時,這一切都是好事。

然後一些其他明亮的人說,使用更多的位!但是多少16 ?, 32?但是如果我不希望我的文件大小增加一倍或四倍?更聰明的人說:「簡單的我們將使用一種編碼」,因此誕生了utf-8和ISO 8859-1及其同類。更聰明的人說,讓每一個字符和符號的一個真正的價值和數量,因此出生unicode。

'\ u200f'是一個Unicode字符,指示從右向左顯示的文本。它沒有相應的鍵盤。
str(行[0])試圖將您的數據轉換爲標準的ascii字符串,並假定每個字符都可以用8位值寫入。 'u200f'的小數值爲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!)

+0

嗨WombatPM.Thanks您的回覆之前。我使用2.7是因爲它嵌入了我正在運行的程序中。我無法真正看到該領域的角色。數據是來自用戶的輸入。即使我現在刪除它,下次可能還是別的。我可能應該考慮如何限制用戶輸入,一旦我完全理解你在說什麼。我是編程新手。我試圖用這個 decRow0 = unicode(str(row [0]),errors ='ignore')但仍然得到相同的錯誤。我認爲我在我的理解中缺少一些東西... – lida

+0

程序是負責獲取這些數據還是它是另一個源 – WombatPM

+0

數據由用戶輸入到另一個將其寫入數據激發的軟件中(因此,最有可能的用戶錯誤,意外按在鍵盤上的東西)。該字段是一個文本字段,可以鍵入任何內容。 – lida

相關問題