2017-09-15 172 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,但不知何故有错误 –