最近、Latin1を使用してエンコードされ、ブラウザーの疑問符記号で表示されたときにレンダリングされていたMySQLデータベースに遭遇しました。これを修正するために、すべてのテーブルでDBのエンコーディングをutf8に、Collationをutf8_general_ciに変更しましたが、既に保存されているデータはまだ疑問符の記号で表示され、mysqlからブラウザーへのデータの保存とポーリングはすべて行われました。 phpによって行われた私はutf8がphpでも使用されていることを確認し、多くの人がオンラインで提案したようにセット名utf8を実行しましたが、問題は、文字列にÃÂ'などの奇妙な文字がないことを知っていたということです。
データの例
保存:
EMMANUEL PE \ xc3 \ u0192 \ xc2 \ u2018A GOMEZ PORTUGAL
レンダリング:
EMMANUELPEÃÂ'AGOMEZPORTUGAL
ちゃんとした:
EMMANUELPEÑAGOMEZPORTUGAL
保存:
ルイス・ヘルン\xe1ndez-ヒガレダ
レンダリング:
ルイス・エルナンデス・ヒガレダ
ちゃんとした:
ルイス・エルナンデス・ヒガレダ
保存:
Teresa de Jes \ xc3 \ u0192 \ xc2 \ xbas Galicia G \ xc3 \ u0192 \ xc2 \ xb3mez
レンダリング:
TeresadeJesúsGaliciaGómez
ちゃんとした:
TeresadeJesúsGaliciaGómez
保存:
DR。JOS \ xc3 \ u0192 \ xc2 \ u2030 ABEN \ xc3 \ u0192 \ xc2 \ x81MAR RIC \ xc3 \ u0192 \ xc2 \ x81RDEZ GARC \ xc3 \ u0192 \ xc2 \ x8dA
ちゃんとした:
DR。JOSÉABENÃÂMARRICÃÂRDEZGARCÃÂA
現在、Pythonを使用してDBからデータを取得していますが、Unicode utf8に正規化しようとしていますが、本当に迷っています。ここに到達している限り、現在奇妙なものとして表示されているものを変換する必要があります。上記のように文字を読み取り可能なテキストに変換します。
ここで何が欠けていますか?データは修復不可能ですか?
関数 https://gist.github.com/2649463
注: すべての例の中で、適切にレンダリングされているものが1つあります(これを修正する方法についてアドバイスがあれば、そこに残されているので考慮されます)