2017-09-15 102 views
0

我試圖從數據庫中讀取用戶名,如果有非UTF-8字符,則會引發UnicodeDecodeError。從文件內容中刪除非UTF8字符

我不確定所有非UTF8字符是什麼,我正在尋找解決方案。

我想保留特殊符號,但只是過濾掉那些與UTF-8不兼容的符號。 ³(商標),不使用UTF-8,它們是我所知道的唯一兩個。

我還想保留中文符號,阿拉伯文等。這就是爲什麼我使用UTF8。

代碼:

def is_author_used(author): 
     with open("C:\\Users\\Administrator\\Desktop\\authors.txt", 'r', encoding='utf-8') as f: 
      content = f.read().splitlines() 
     if author in content: 
      return True 
     return False 

    def set_author_used(author): 
     with open("C:\\Users\\Administrator\\Desktop\\authors.txt", 'a', encoding='utf-8') as f: 
      f.write(author + '\r\n') 
+0

看來你的文件根本就沒有UTF-8格式。 只有字符達到0x7f以UTF-8中的「常用方式」存儲。如果你有一個字節> = 0x80,它是多字節字符的一部分。 將文件讀取爲UTF-8,這確實不會導致錯誤。 – glglgl

+0

記事本/文本文件實際上是UTF-8 –

+2

「³和™(商標),UTF-8不工作」是什麼意思?這些都是非常好的Unicode字符,並且**所有** Unicode字符都可以表示爲UTF-8。 –

回答

2

也許是這樣的:

with open('text.txt', encoding='utf-8', errors='ignore') as f: 
    content = f.read().splitlines() 
+2

我不確定忽略錯誤會解決問題。 – glglgl

+0

@glglgl我有一個類似的情況,它爲我工作。 –

+0

@glglgl我同意它的有線OP說它是utf-8,但不知何故有錯誤 –