【问题标题】:Cannot decode/encode in UTF-8无法以 UTF-8 解码/编码
【发布时间】:2011-01-01 21:24:15
【问题描述】:

我有一个允许用户输入单词的文本框。

The user enters: über

在后端,我得到这样的词:

def form_process(request):
    word = request.GET.get('the_word')
    word = word.encode('utf-8')
    #word = word.decode('utf-8')
    print word

由于某种原因,我无法对此进行解码或编码!! 它给了我错误:

 UnicodeEncodeError
 ('ascii', u'\ufffd', 0, 1, 'ordinal not in range(128)')

编辑:当我执行“repr(word)”时,这就是我得到的:

u'\ufffd'

【问题讨论】:

  • 您真的是要创建utf-9 标签吗? :D
  • 什么是repr(word),当您刚刚从请求中得到它时?那个fffd很奇怪......
  • 这是从 manage.py runserver 还是 apache mod_python/wsgi 运行的?

标签: python django encoding utf-8 decoding


【解决方案1】:

你记得放:

accept-charset="utf-8"

在表单标签中?

编辑:settings.py 中的 DEFAULT_CHARSET 是否设置为 'utf-8' ?

【讨论】:

  • 我添加了这个,但它仍然有同样的问题。
  • 不要使用accept-charset。 IE 不能正确支持它。您将继续获得以页面的指定/猜测编码进行编码的字符串;只有无法在该字符集中编码的字符才能使用 UTF-8。并且 IE 不会告诉你它使用了哪种编码。如果您想要可靠的 UTF-8 表单提交,您必须使用 Content-Type 参数或等效元标记将包含表单的页面的字符集指定为 UTF-8。
【解决方案2】:

解决了!

我有 escape(word) ...在 javascript ...在我将它传递给服务器之前。

【讨论】:

  • 那肯定会把事情搞砸。要从文本构造查询字符串,您需要encodeURIComponent。永远不要使用escape
【解决方案3】:

有什么理由使用打印字吗?如果没有,它应该可以在没有这些行的情况下工作。

def form_process(request):
    word = request.GET.get('the_word')

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2021-05-14
    • 2020-07-17
    • 2018-05-05
    • 2019-11-10
    • 1970-01-01
    • 2015-08-24
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多