Python将特殊的unicode字符(如♡)转换为字符串中的十六进制文字(如0x2661)

时间:2016-07-21 14:10:21

标签: python string bash unicode tweepy

我正在编写一个程序,将twitter中的屏幕名称和推文拉到txt文件中。某些屏幕名称包含特殊的unicode字符,如♡。在我的Bash终端中,这些字符显示为空框。当我尝试插入这个字符并告诉我它包含一个不可翻译的字符时,我的sql失败了。有没有办法将python中的特殊字符转换为十六进制格式?我也很高兴用

替换这些特殊字符

理想情况下,“screenName♡”会转换为“screenName0x2661”或只是将特殊字符替换为“screenName#REPLACE#”

1 个答案:

答案 0 :(得分:0)

您可以使用>>> u = unichr(40960) + u'abcd' + unichr(1972) >>> u.encode('utf-8') '\xea\x80\x80abcd\xde\xb4' >>> u.encode('ascii') Traceback (most recent call last): ... UnicodeEncodeError: 'ascii' codec can't encode character u'\ua000' in position 0: ordinal not in range(128) >>> u.encode('ascii', 'ignore') 'abcd' >>> u.encode('ascii', 'replace') '?abcd?' >>> u.encode('ascii', 'xmlcharrefreplace') 'ꀀabcd޴' 方法实现此目的,解释here。来自文档:

  

另一个重要的方法是.encode([encoding],[errors ='strict']),   它返回编码的Unicode字符串的8位字符串版本   在请求的编码中。 errors参数与。相同   unicode()构造函数的参数,另外一个   可能性;以及'严格','忽略'和'替换',你可以   还传递'xmlcharrefreplace',它使用XML的字符引用。   以下示例显示了不同的结果:

bundle exec rake db:migrate