1

エンコーディングの問題で立ち往生したのは、ここ数週間で 2 回目です。私はすでにこの問題に非常に長い時間を費やしてきました。

これは私がやりたいことです:

1) コンピューターの MySQL テーブルからいくつかの行を選択します。

2) これらの行をテキスト ファイルに書き込みます。

3) テキスト ファイルを Amazon EC2 Ubuntu インスタンスに転送します。

4) テキスト ファイルの内容を MySQL データベースに書き込みます。

5) #4 で、Django にデータベースからいくつかの行を選択させます。

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: モデルに対応するオブジェクトを単純に返しました。私のモデルにはユニコード関数がありますが、デフォルトでそれを読んだので、それを呼び出しませんでした。オブジェクトを呼び出すときに既に呼び出されています。

ステップ 6 では、HTML ファイルの先頭に次の行があります。

<meta charset="utf-8" />

また、Apache エンコーディングのデフォルトを Unicode に変更しました。また、ステップ 4 の SQL データベースが Unicode であることも確認しました。

しかし、このすべての後でも、私の Web サイトには、人在åšï¼Œå¤©åœ¨çœ‹ã€ などの不可解で奇妙な文字が多数表示されます。

どんな助けでも大歓迎です - 私は .decode() と .encode('utf-8') を含む非常に多くのバリエーションを試しましたが、すでにこの問題にあまりにも長い時間を費やしました!

4

2 に答える 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機能を使用することです。

于 2012-07-19T03:39:15.587 に答える
0

問題の大部分は、おそらく、Django のデータベース ORM を使用する代わりに、手動で項目をデータベースに挿入していることにあります。ORM はすべてのエンコーディング/デコーディングを処理し、データベース自体で使用されているエンコーディングが何であれ、データベースから適切な Unicode を取得できるようにします。

では、正しいエンコーディングをデータベースに挿入していると本当に確信していますか? おそらく、ORM で簡単なテストを行う必要があります。ファイルを正しい方法でcodecs.open()(あなたがやっているように)読んでいることを確認し、それをdjangoモデルに詰め込んで保存してください。

于 2012-07-19T08:19:01.220 に答える