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,因为它使代码维护更容易.