将Unicode转换为python

sos*_*inu 3 python unicode utf-8

可能重复:
将Unicode转换为UTF-8 Python

我是一个非常新的python程序员,正在编写我的第一个脚本.脚本从plist字符串中提取文本,然后对其执行某些操作,然后将其打包为HTML电子邮件.

从一些条目,我得到可怕的Unicode"外部序数128"错误.

阅读尽可能多的关于编码和解码的内容,我知道对我来说很重要,但是我很难理解何时或如何做到这一点.

首先使用plistlib引入违规变量,并从markdown转换为HTML,如下所示:

entry = result['Entry Text']
donotecontent = markdown2.markdown(entry)
Run Code Online (Sandbox Code Playgroud)

之后,它会像这样放入电子邮件:

html = donotecontent + '<br /><br />' + var3
part1 = MIMEText(html, 'html')
msg.attach(part1)
Run Code Online (Sandbox Code Playgroud)

我的问题是,对于我来说,确保此内容中的Unicode字符不会导致此错误的最佳方法是什么.我不想忽视这些角色.

小智 11

对不起,我的英语很糟糕.我说中文/日文,每天使用CJK字符.Ceron几乎解决了这个问题,因此我不会再讨论如何使用encode()/ decode().

当我们使用str()任何unicode对象时,它会将unicode字符串编码为bytedata; 当我们使用unicode()转换str对象时,它会将bytedata解码为unicode字符.

并且,编码必须是返回的sys.getdefaultencoding().

默认情况下,默认情况下sys.getdefaultencoding()返回'ascii',执行str()/ unicode()转换时可能会抛出编码/解码异常.

如果你想通过str()or 进行str < - > unicode转换unicode(),并且使用'utf-8'进行implicity编码/解码,你可以执行以下语句:

import sys    # sys.setdefaultencoding is cancelled by site.py
reload(sys)    # to re-enable sys.setdefaultencoding()
sys.setdefaultencoding('utf-8')
Run Code Online (Sandbox Code Playgroud)

它会导致以后执行str()unicode()转换任何带有编码utf-8的basetring对象.

但是,我更愿意使用encode()/ decode()explicit,因为它使代码维护更容易.