首页 文章

Django驱动的站点中的Unicode

提问于
浏览
1

这是几个星期以来我第二次陷入编码问题 . 我已经在这个问题上花了这么长时间,我很感激能得到的任何帮助 .

这就是我想要做的:

1)从我的计算机上的MySQL表中选择一些行 .

2)将这些行写入文本文件 .

3)将文本文件传输到我的Amazon EC2 Ubuntu实例 .

4)将文本文件的内容写入MySQL数据库 .

5)让Django从#4中的数据库中选择一些行 .

6)在网站上显示 .

在步骤#1中,我只有一个普通的SELECT语句 . 在第2步中,我这样做了:

file = codecs.open('commentsfordjango.txt', encoding = 'utf-8', mode='w')
file.write(fullcomment.decode('utf8') + '\n\n\n\n\n\n')

在第2步之后,我在Windows中打开了.txt文件,我可以看到所有实际的中文字符而没有任何错误 .

在步骤#3中,我刚刚使用WinSCP传输了文件 . 在第4步中,我这样做了:

file = open('/usr/local/src/blog/commentsfordjango.txt', 'r')
cursor.execute("INSERT INTO polls_poll (commenttext, pos, neu, neg) VALUES (%s, 0, 0, 0)", line)

在步骤#5中,我在 views.py 中执行了此操作:我只返回了与模型对应的对象 . 我的模型有一个 unicode 函数,但我没有调用它,因为我在默认情况下读取它,当你调用对象时它已被调用 .

在步骤#6中,我的HTML文件在文件顶部有以下行:

<meta charset="utf-8" />

另外,我将Apache编码默认更改为Unicode . 我还确保步骤#4中的SQL数据库是Unicode格式 .

然而,在这之后,我的网站仍然显示了一堆不可读的,奇怪的字符:人在åšï¼Œå¤©åœ¨çœ<〠.

任何帮助都将非常感激 - 我已经尝试了很多涉及.decode()和.encode('utf-8')的变体,并且已经花了很长时间才解决这个问题!

2 回答

  • 1

    在步骤#2中,您应该将文本编码为UTF-8 .

    with open("commentsfordjango.txt", "wb") as f:
        f.write(fullcomment.encode('utf8'))
    

    在步骤#3中,您可以将从文件中读取的数据解码回unicode .

    with open("commentsfordjango.txt", "rb") as f:
        for line in f.read().decode("utf-8").splitlines():
            cursor.execute("INSERT INTO polls_poll (commenttext, pos, neu, neg) VALUES (%s, 0, 0, 0)", line)
    

    更好的解决方案是使用Django的内置loaddata/dumpdata工具 .

  • 0

    问题的很大一部分可能是您手动将项目插入数据库而不是使用Django的数据库ORM . ORM负责所有编码/解码,确保从数据库中获得良好的unicode,无论数据库本身内部使用何种编码 .

    那么:你真的确定要将正确的编码插入数据库吗?您可能应该使用ORM进行快速测试 . 确保使用 codecs.open() (您似乎正在做的)以正确的方式读取文件并将其填充到django模型中并保存它们 .

相关问题