Python编码问题

viv*_*uri 1 python encoding utf-8

我真的迷失在Python的所有编码/解码问题中.阅读了很多关于如何完美处理传入的文档,我仍然遇到几种语言的问题,比如韩语.无论如何,这就是我正在做的事情.

korean_text = korean_text.encode('utf-8', 'ignore')
korean_text = unicode(korean_text, 'utf-8')
Run Code Online (Sandbox Code Playgroud)

我把上面的数据保存到数据库,这很好.

稍后当我需要显示数据时,我从db获取内容,并执行以下操作:

korean_text = korean_text.encode( 'utf-8' )
print korean_text
Run Code Online (Sandbox Code Playgroud)

而我所看到的只是'???' 在浏览器上回应.有人可以告诉我保存和显示上述数据的正确方法.

谢谢

nos*_*klo 10

即使阅读了一些文档,您似乎也对unicode的工作方式感到困惑.

  • Unicode不是编码.Unicode是编码的缺失.
  • utf-8不是unicode.utf-8是一种编码.
  • 解码 utf-8字节串来获得unicode.您使用编码(例如utf-8) unicode进行编码,以获取编码的字节串.
  • 只有字节串可以保存到磁盘,数据库或在网络上发送,或打印在打印机或屏幕上.Unicode仅存在于代码中.

好的做法是尽早解码你得到的所有东西,在你的所有代码中解码它,作为unicode,然后在文本准备离开你的程序时,尽可能晚地编码,到屏幕,数据库或网络.


现在为您的问题:

如果您有来自浏览器的文本,例如,来自表单,则会对其进行编码.它是一个字节串.它不是unicode.

然后,您必须解码它以获得unicode.使用浏览器用于编码的编码对其进行解码.正确的编码来自浏览器本身,在正确的HTTP REQUEST标头中.

'ignore'解码时请勿使用.由于浏览器说它正在使用哪种编码,因此不应该出现任何错误.使用'ignore'意味着如果存在错误,您将隐藏错误.

也许您选择的Web框架已经做到了.我知道django,pylons,werkzeug,cherrypy都这样做.在那种情况下,你已经获得了unicode.

现在您已经解码了unicode字符串,您可以使用您希望存储在数据库中的任何编码对其进行编码.utf-8是一个很好的选择,因为它可以编码所有unicode代码点.

从数据库中检索数据时,使用与用于存储数据的相同编码对其进行解码.然后使用您要在页面上使用的编码对其进行编码 - 在html元标题中声明的编码<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>.如果编码与上一步骤中使用的编码相同,则可以跳过解码/重新编码,因为它已经在utf-8中编码.

如果您看到???上述任何步骤中的数据丢失.要确切地知道,需要更多信息.

  • +1可惜它在咖啡杯上打印太长了. (2认同)