Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t';编码(“utf-8”、“忽略”)。解码(“utf-8”)和“x27”;在Python3中剥离非UTF8字符?_Python_Django_Python 3.x_String_Utf 8 - Fatal编程技术网

为什么';t';编码(“utf-8”、“忽略”)。解码(“utf-8”)和“x27”;在Python3中剥离非UTF8字符?

为什么';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

我正在使用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是Unicode的简单编码。Unicode中的所有字符都可以用UTF-8编码,所有有效的UTF-8代码都可以解释为Unicode字符

所以您只是对Unicode字符串进行编码和解码,所以代码不应该做任何事情。(确实存在一些例外情况:Python字符串实际上是Unicode的超集,因此您的代码只需删除非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')