python - 为什么 'encode("utf-8", 'ignore').decode("utf-8")' 在 Python 3 中不去除非 UTF8 字符?
问题描述
我正在使用 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>"
无论这个“<200e>”是什么,显然都是非 UTF-8 字符串,因为当我尝试将其插入 MySQL 数据库(部署为 docker 映像)时,我收到以下错误...
web_1 | django.db.utils.OperationalError: Problem installing fixture '/app/maps/fixtures/seed_data.yaml': Could not load maps.Coop(pk=191): (1366, "Incorrect string value: '\\xE2\\x80\\x8E' for column 'web_site' at row 1")
解决方案
你row['website']
已经是一个 Unicode 字符串。UTF-8 可以支持所有有效的 Unicode 代码点,因此.encode('utf8','ignore')
通常不会忽略任何内容并将整个字符串编码为 UTF-8,然后.decode('utf8')
再次将其更改回 Unicode 字符串。
如果您只是想去除非 ASCII 字符,请使用以下内容仅过滤 ASCII 字符并忽略其余字符。
row['website'].encode('ascii','ignore').decode('ascii')
推荐阅读
- c++ - '__min_lv_minval' 有意义吗?
- selenium - 未解决的问题:WebDriver 无法解析为类型 ChromeDriver 无法解析为类型
- vue.js - Vue.js 什么时候观察者开始触发?
- azure - Azure B2C - REST API 调用错误“消息:声明交换
步骤中指定 返回了无法解析的 HTTP 错误响应” - java - 如何以其他形式显示 Java NetBeans 的结果?
- keras - 以下代码在 jupyter notebook 中使用时显示错误
- xero-api - 如何在 Xero 中导出所有 PDF 发票
- angular - 如何在 Angular 10 中将动态表导出为 PDF
- traefik - Traefik 2.2 仅针对 1 个后端同时进行大量 /health 调用
- agora.io - 如何停止使用 agora web sdk ng 仅发布视频轨道/音频轨道?