【问题标题】:django encoding to utf8 not workingdjango编码为utf8不起作用
【发布时间】:2016-03-19 19:07:04
【问题描述】:

我有点卡在这里。我有这段代码,它将文本中的 html 元素转义并将其编码为 utf8。

import HTMLParser

def clean_text(text):
    htmlparser = HTMLParser.HTMLParser()
    return htmlparser.unescape(
        ' '.join(text.replace('\n', '').split())
    ).replace(';', ',').encode('utf-8').strip()

我正在使用 mysql(上帝保佑我!)

并且此代码在两个项目中运行。在第一个项目中,代码运行良好,没有问题。在另一个项目中,字符串会这样保存:

Die Verbindungen zwischen Dinosauriern und Vögeln immer stärker

应该是

Die Verbindungen zwischen Dinosauriern und Vögeln immer stärker

我在 django 1.7 和 python 2.7.9 两个项目中都使用

我错过了什么? mysql 搭配是utf8_general_ci,聊天集是utf8。两个 mysql 数据库在设置中是相同的。

能解决这个问题真是个奇迹……如果有人能帮我调试这个东西,我会给你一个温暖的拥抱和亲吻

【问题讨论】:

  • 您希望clean_text 的输出是unicode 还是bytes/str
  • @bgusach 好问题!我认为 :)
  • 我认为您应该了解函数的预期输入和输出。我想说如果你想存储在数据库中,你不必处理编码,只需传递 unicode 对象(即不需要encode)。
  • @bgusach 试过了,结果一样
  • 你在哪里以及如何得到意想不到的结果?

标签: python mysql django utf-8


【解决方案1】:

Vögeln --> Vögeln 是 Mojibake 的一个例子

  • 客户端中的字节已正确编码为 utf8(良好)。
  • 您可能默认连接到SET NAMES latin1(或set_charset('latin1') 或...)。 (应该是utf8。)
  • 表格中的列可能是CHARACTER SET utf8,也可能不是,但应该是这样。

也许有用:Django character latin1 mysqlIncorrect string value in python+django+Mysql

Python 清单:

  • # -*- coding: utf-8 -*- --(用于代码中的文字)
  • charset='utf8' in connect() call -- 是埋在bottle_mysql.Plugin 中吗? (注意:试试 'utf-8' 和 'utf8')
  • 以 utf8 编码的文本。
  • 如果您愿意在任何地方接受 utf8,则无需 encode() 或 decode()。
  • u'...' 用于文字
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 接近 html 页面的开头
  • 内容类型:文本/html; charset=UTF-8(在 HTTP 响应标头中)
  • header('Content-Type: text/html; charset=UTF-8'); (在 PHP 中获取响应头)
  • CHARACTER SET utf8 COLLATE utf8_general_ci MySQL 中的列(或表)定义。
  • [[UTF-8 all the way through一路通]]
  • 使用 MySQL Connector/Python 代替 pyodbc 和 MySQL Connector/ODBC

(@DanielRoseman -- 我说错了吗?)

【讨论】:

    【解决方案2】:

    在您的文件顶部提及编码# coding: utf-8,它会像魅力一样工作。

    【讨论】:

    • 真的是# coding: utf-8吗?因为我只知道# -*- coding: utf-8 -*-,而且我已经在里面了
    • 我使用了您的代码并指定了编码并且它有效。 :)
    • 我认为这是对一个模棱两可的问题的模棱两可的答案。
    • 不要随意推荐这个。编码声明只影响代码本身的文字;这个问题是关于从数据库中检索文本,其中编码声明根本没有任何效果。
    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 2011-02-22
    • 2022-01-12
    • 2019-06-21
    • 2012-02-10
    • 1970-01-01
    • 2012-02-21
    • 2017-01-05
    相关资源
    最近更新 更多