2016-12-15 25 views
0

我嘗試從「latin1」中導入數據庫編碼的數據,更改爲「unicode」並將它們導入到我的應用中。通常這是沒有問題的。但現在我有一個新的數據與一個奇怪的字符字段=「\ x17」用Python替換或刪除傳輸塊的結尾2.7

我如何處理這在Python中?

我現在所做的是替換這些數據的功能。但我認爲有更好的方法,那麼這個:

def replace_problem_characters(self, text): 
    replace_store = {u"\x17" : ""} 
    for key, value in replace_store.items(): 
     if key in text: 
      text = text.replace(key, value) 
    return text 
+0

[Check this out](http://stackoverflow.com/questions/2672326/what-does-a-leading-x-mean-in-a-python-string-xaa)你確定你沒有需要這些數據? – Priyank

+0

在這種情況下,是的。因爲它是一個人的名字,我可以正確地在Web界面中看到。它來自立陶宛人。也許他從本地編碼的文本文檔複製和粘貼? – oxidworks

+0

@oxidworks \ x17是一個控制字符,以大多數編碼存在,包括ascii。不可能複製和粘貼。也許他的IME允許輸入控制字符... –

回答

0

如果數據庫編碼爲「拉丁語」,爲什麼你搞砸utf-8?請注意,在代碼片段的第4行中,推測是用拉丁語編碼的,但在第5行中,固定記錄最終以utf-8編碼。

當訪問數據庫中的文本列時: 1.如果沒有爲您完成,請立即從拉丁文解碼爲Unicode。 2.使用Unicode方法處理文本。 3.如果還沒有完成,請在更新數據庫之前將Unicode文本編碼爲拉丁文。

對於像姓名這樣的數據,您極有可能不想要任何32個C0控件(\ x00至\ x1f)。

如果您的數據庫真的是拉丁文a latin_1又名ISI-8859-1,那麼您不需要32個C1控件(\ x80到\ x9f)。但是,如果您發現數據庫中包含這些信息,那麼很可能您應該使用cp1252或類似的方法,將x80以上的\ x9f視爲有效的數據點,並提供更加重音的字母和標點符號。

在任何情況下,如果數據庫使用utf-8進行編碼,並且可以使用Python 3.x而不是2.7,那將會好很多。

+0

謝謝,我現在從數據庫讀取後直接將編碼從latin1改爲unicode。問題被編輯。將數據庫更改爲「utf8」也是自一段時間以來計劃的,但最近幾年時間運行速度非常快:) – oxidworks