我真的迷失在Python的所有编码/解码问题上。阅读了很多关于如何完美处理传入的文档,我仍然遇到几种语言的问题,比如韩语。无论如何,这就是我正在做的事情。
korean_text = korean_text.encode('utf-8', 'ignore')
korean_text = unicode(korean_text, 'utf-8')
我将上述数据保存到数据库,这很好。
稍后当我需要显示数据时,我从db获取内容,并执行以下操作:
korean_text = korean_text.encode( 'utf-8' )
print korean_text
我所看到的只是'???'在浏览器上回应。有人可以告诉我保存和显示上述数据的正确方法。
由于
答案 0 :(得分:10)
即使阅读了一些文档,您似乎也对unicode的工作方式感到困惑。
utf-8
不是unicode。 utf-8
是一种编码。 好的做法是尽早解码你得到的所有东西,在你的所有代码中使用解码的unicode,然后在文本准备离开你的程序时尽可能晚地对其进行编码,屏幕,数据库或网络。
现在为您解决问题:
如果您有来自浏览器的文本,例如,来自表单,则会对其进行编码。它是一个字节串。它不是unicode。
然后必须对其进行解码才能获得unicode。使用浏览器用于编码的编码对其进行解码。正确的编码来自浏览器本身,在正确的HTTP REQUEST标头中。
解码时请勿使用'ignore'
。由于浏览器说它正在使用哪种编码,因此不应该出现任何错误。使用'ignore'
表示如果有错误,您将隐藏错误。
也许你选择的网络框架已经做到了。我知道django,pylons,werkzeug,cherrypy都这样做。在那种情况下,你已经获得了unicode。
现在您已经解码了unicode字符串,您可以使用您希望存储在数据库中的任何编码对其进行编码。 utf-8
是一个不错的选择,因为它可以编码所有unicode代码点。
从数据库中检索数据时,请使用您用于存储数据的相同编码对其进行解码。然后使用您要在页面上使用的编码对其进行编码 - 在html元标题<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
中声明的编码。如果编码与上一步中使用的编码相同,则可以跳过解码/重新编码,因为它已经在utf-8中编码。
如果您看到???
,那么上述任何步骤都会丢失数据。要准确了解,需要更多信息。
答案 1 :(得分:0)
通读this post,了解如何在Python中处理Unicode。
你基本上想要做这些事情:
.encode() text to a particular encoding (such as utf-8) before sending it to the database.
.decode() text back to unicode (from your encoding) when reading it from the database
答案 2 :(得分:0)
问题是肯定的(特别是如果其他非ASCII字符似乎工作正常)您的浏览器或操作系统没有正确的字体来显示韩文文本,或者浏览器使用的默认字体不是支持韩语。尝试选择另一种字体直到它起作用。