0

数千の値を Django データベースにインポートする基本的なスクリプトを作成しました。これがどのように見えるかです: link .

これらの場所はキリル文字で、Unicode リテラルとして表されます。ただし、それらをデータベースに保存するとすぐに、ある種の 16 進エンコーディングで、エンコードされた単純な文字列のように見えるものに変換されます。

>>> Region.objects.all()[0].parent
'\xd0\xbe\xd0\xb1\xd0\xbb\xd0\xb0\xd1\x81\xd1\x82 \xd0\xa1\xd0\xbb\xd0\xb8\xd0\xb2\xd0\xb5\xd0\xbd'

驚いたことに、それらは管理パネルに正しく表示されますが、使用しようとすると問題が発生します。それらをユニコードとして保存および取得するにはどうすればよいですか?

MySQLの上でDjango 1.4.0を実行しており、照合はutf8_binに設定されています。

4

2 に答える 2

1

データが Unicode 文字列ではなく UTF-8 バイト文字列として返されているようです。それをデコードしてみてください:

>>> x='\xd0\xbe\xd0\xb1\xd0\xbb\xd0\xb0\xd1\x81\xd1\x82 \xd0\xa1\xd0\xbb\xd0\xb8\xd0\xb2\xd0\xb5\xd0\xbd'
>>> x.decode('utf-8')
u'\u043e\u0431\u043b\u0430\u0441\u0442 \u0421\u043b\u0438\u0432\u0435\u043d'
>>> print x.decode('utf-8')
област Сливен
于 2012-12-04T23:39:38.017 に答える
1

これは Django/MySQL の「バグ」です。問題#16052を参照してください。実際にはここに文書化されています

于 2012-12-04T23:45:13.233 に答える