为什么';t';编码(“utf-8”、“忽略”)。解码(“utf-8”)和“x27”;在Python3中剥离非UTF8字符?
我正在使用Python 3.7和Django 2.0。我想从字符串中去掉非UTF-8字符,这是我通过读取这个CSV文件获得的。我试过这个为什么';t';编码(“utf-8”、“忽略”)。解码(“utf-8”)和“x27”;在Python3中剥离非UTF8字符?,python,django,python-3.x,string,utf-8,Python,Django,Python 3.x,String,Utf 8,我正在使用Python 3.7和Django 2.0。我想从字符串中去掉非UTF-8字符,这是我通过读取这个CSV文件获得的。我试过这个 web_site = row['website'].strip().encode("utf-8", 'ignore').decode("utf-8") 但这似乎不起作用,因为我有一个结果字符串,看起来像 web_site: "wbez.org<200e>" 我认为你混淆了编码 Python有一个标准字符集:Unicode UTF-8是Unic
web_site = row['website'].strip().encode("utf-8", 'ignore').decode("utf-8")
但这似乎不起作用,因为我有一个结果字符串,看起来像
web_site: "wbez.org<200e>"
我认为你混淆了编码
- Python有一个标准字符集:Unicode
- UTF-8是Unicode的简单编码。Unicode中的所有字符都可以用UTF-8编码,所有有效的UTF-8代码都可以解释为Unicode字符
subrogateScape
,对于这种极为罕见的情况,通常您只需读取sys.argv
或os.environ
)即可进行输入)
无论如何,我认为你做错了事情。在此网站中搜索一般问题(例如“删除非ascii字符”)。通常最好先进行分解(使用K,兼容性),然后删除重音,然后删除非ascii字符,这样可以翻译更多字符。有各种各样的函数来创建slug,它们做得更好,或者还有一个库可以将更多的字符翻译成“几乎相等”的ascii字符(Unicode有字母a的各种表示形式,您可能还需要将Alpha和Aleph以及…翻译成字母a)(最好是放弃,特别是如果你有一门外语,你可能会放弃一切)。你的
行['website']
已经是一个Unicode字符串。UTF-8可以支持所有有效的Unicode代码点,因此.encode('utf8','ignore'))
通常不会忽略任何内容并将整个字符串编码为UTF-8,而.decode('utf8')
会再次将其更改回Unicode字符串
如果只是想去除非ASCII字符,请使用以下命令仅过滤ASCII字符,而忽略其余字符
row['website'].encode('ascii','ignore').decode('ascii')
U+200E
是一个从左到右的标记
。注意:UTF-8编码不会编码Python在其str
类型中允许的UTF-16使用的高/低代理项对,因此类似于'\ud800\udc00'。encode('utf-8','ignore')
将以静默方式返回b'
。因此OP的代码可能会忽略一些垃圾,但如果它接收到所述垃圾,则可能表明存在更大的问题。@ShadowRanger因此使用了“通常不会忽略”的措辞。
row['website'].encode('ascii','ignore').decode('ascii')