Joe*_*e J 5 python csv unicode ascii utf-8
我正在使用Django应用程序将字符串导出到CSV文件.该字符串是通过前端表单提交的消息.但是,当输入中提供了unicode单引号时,我一直收到此错误.
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019'
in position 200: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用下面的代码将unicode转换为ascii,但仍然会出现类似的错误.
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-9: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我已经筛选了几十个网站并学到了很多关于unicode的知识,但是,我仍然无法将这个unicode转换为ascii.我不在乎算法是否删除了unicode字符.注释的行表示我尝试过的各种选项,但错误仍然存在.
import csv
import unicodedata
...
#message = unicode( unicodedata.normalize(
# 'NFKD',contact.message).encode('ascii','ignore'))
#dmessage = (contact.message).encode('utf-8','ignore')
#dmessage = contact.message.decode("utf-8")
#dmessage = "%s" % dmessage
dmessage = contact.message
csv_writer.writerow([
dmessage,
])
Run Code Online (Sandbox Code Playgroud)
有没有人有任何关于删除unicode字符的建议我可以将它们导出为CSV?这个看似简单的问题让我头晕目眩.任何帮助深表感谢.谢谢,乔
您不能将Unicode字符u'\u2019'
(U + 2019右单引号)编码为ASCII,因为ASCII中没有该字符.ASCII只是基本的拉丁字母,数字和标点符号; 你没有像这个角色那样得到任何重音字母或"智能引号".
所以你必须选择另一种编码.现在通常明智的做法是导出到UTF-8,它可以容纳任何Unicode字符.不幸的是,如果您的目标用户正在使用Office(他们可能是),他们将无法以CSV格式读取UTF-8编码的字符.相反,Excel将使用该机器的系统默认代码页读取文件(也误称为'ANSI'代码页),最后使用mojibake ’
代替’
.
因此,如果您希望字符正确显示,则意味着您必须猜测用户的系统默认代码页.对于西方用户来说,这将是代码页1252.使用非西方Windows安装的用户会看到错误的字符,但是你无法做到这一点(除了组织写给Microsoft的写信活动,只是为了放弃愚蠢的废话与ANSI已经和其他人一样使用UTF-8).
代码页1252可以包含U + 2019(’
),但显然还有更多不能代表的字符.为避免获取UnicodeEncodeError
这些字符,您可以使用ignore
参数(或replace
用问号替换它们).
dmessage= contact.message.encode('cp1252', 'ignore')
Run Code Online (Sandbox Code Playgroud)
或者,放弃并删除所有非ASCII字符,这样无论语言环境如何,每个人都会获得同样糟糕的体验:
dmessage= contact.message.encode('ascii', 'ignore')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3757 次 |
最近记录: |