这是几个星期以来我第二次陷入编码问题 . 我已经在这个问题上花了这么长时间,我很感激能得到的任何帮助 .
这就是我想要做的:
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 回答
在步骤#2中,您应该将文本编码为UTF-8 .
在步骤#3中,您可以将从文件中读取的数据解码回unicode .
更好的解决方案是使用Django的内置loaddata/dumpdata工具 .
问题的很大一部分可能是您手动将项目插入数据库而不是使用Django的数据库ORM . ORM负责所有编码/解码,确保从数据库中获得良好的unicode,无论数据库本身内部使用何种编码 .
那么:你真的确定要将正确的编码插入数据库吗?您可能应该使用ORM进行快速测试 . 确保使用
codecs.open()
(您似乎正在做的)以正确的方式读取文件并将其填充到django模型中并保存它们 .