2012-02-08 14 views
0

"tweets"というデータベーステーブルがあります。 Twitter Search APIを使用してツイートをダウンロードしました。データベーステーブルの照合順序は、MySQLがアドバイスしたlatin1_swedish_ciに設定されています。これは、少なくともEnlish言語を保持しているためです(MySQLサポートページのどこかでこれを読んでいます)。とにかくMySQLデータベースのスクランブルテキスト

、私は今、つぶやきの多くはこのように見える参照してください。

$S&P news: Bank of America’s Mortgage-Bond Accord http://bit.ly/oTXC5a 
@LucciAlerts >> $BAC from a pincher play setup 
ë¯¸êµ­ì‹ ìš©ë“±ê¸‰ì´ë–¨ì–´ì¡Œë„¤ RT @CNBC RT @alexcrippen: S&P affirms AA+ 
  • 私は&を信じて、好きで、元の文字にそれらを変換するために(PHP)htmlspecialchars_decode()を使用して固定することができます。
  • しかし、私は "Americaâ’s"を修正する方法を知らない。明らかに、アポストフェア( ')にする必要がありますが、どうすれば元に戻すことができますか?
  • 最後に、すべての種類のASCII文字をつぶやき(星座、顔文字の代わりに「本当の」笑顔)したい人もいます。それらは上記のように "미êμì<ìš©ë"±ê¸‰‰ ' - ¨ " - "¡Œë "¤"として保存されています。これを修正する方法はありますか?もしそうなら、方法はありますか?

ご協力いただきありがとうございます。

+1

latin1_swedish_ciからutf8へのクイックスイッチを推奨 –

+2

文字セットをutf8に設定してもう一度やり直してください。 – Leigh

+0

たとえば、https://api.twitter.com/1/statuses/show.json?id=38041113268854784を参照してください。 APIによって指定されたTweetのテキストコンテンツ( "text")は次のとおりです: "$ \ u00aa \ u00aa \ u264f \ u00aa \ u00aa \ $ \ u00aa \ u00aa \ u264f \ u00aa \ u00aa RT nadiaberod:makasih(\ u007B \ u007D)RT Lsa_fabulous:ThRT nadiaberod:anind_aurelly Lsa_fabulous denyciouss @nuruuuuuuul ?? "。どのように元の文字を取得しますか? utf8_decode()を通すことはできません; t help ... – Pr0no

答えて

2

これは、iso-8859でutf-8の二重エンコードのように見えます。私はこれを何度も見たことがありますが、決してそうではありませんでした。

は、TwitterのAPIから受信したすべてのそれらの特殊文字を保持するには、アプリケーション

を修正し、データベースは、UTF8照合ではなく、latin1のでなければなりません。 latin1_swedish_ciを使用することは非常に悪いアドバイスでした。

また、PHPアプリケーションのデータベース接続がutf8を使用するように正しく設定されていない可能性があります。

ここで読んでください:http://www.php.net/manual/en/function.mysql-set-charset.php PHPマニュアルのコメントは常に読む価値があります。

zendやその他のライブラリを使用している場合は、通常、db接続でutf8を使用するようにPDOや任意のデータベース層に指示するサポートされた方法があります。

可能であれば、すべてのコンテンツを削除し、照合順序とクライアントの文字セットtu utf8を変換した後で、データベースの再設定を再開してください。

を使用すると、すべてのコンテンツを削除することはできません場合は、データベースに直接ダブル、トリプルエンコードUTF8文字列のASCII表現を修正する必要があるデータ

を修正します。

このデータを「修正」するのは複雑な作業です。latin1照合データベース接続を使用してそのダンプを取得し、utf-8データベース接続を使用してそれを書き戻すのが最も簡単です。 あなたのケースでは、データはUTF-8で3倍または4倍にエンコードされているようです。

はここで読む:http://blog.hno3.org/2010/04/22/fixing-double-encoded-utf-8-data-in-mysql/

protip: あなたはさておき、あなたのデータストアとそれの2ダンプの再生を開始する前に。 1つはiso8859クライアント文字セット、もう1つはutf8クライアント文字セットです。

これで修正できます。また、リンクされたブログ記事に記載されている手順を実行する前に、mysqld CONVERTを使用してデータベーステーブルをUTF8に変換してみてください。