4

Twitterからのツイートを処理し、データベース(MySQL)に保存する作業をしています。

プロセスは完全に実行されていますが、次のようなエラーが発生することがあります。

2012-08-31 08:11:23,303 WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper  - SQL Error: 1366, SQLState: HY000
2012-08-31 08:11:23,304 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper  - Incorrect string value: '\xF0\x9F\x98\x9D #...' for column 'twe_text' at row 1

ログで問題のあるツイートを探すと、次のようなツイートが見つかります。

 2012-08-31 08:11:22,971 INFO com.myapp.TweetLoaderJob  - Text for tweet 241175722096480256: RT @totallytoyosi_: My go
odies, my goodies, not your goodies  <U+1F61D> #m&ms #sweeties #goodies #food  @ The Ritzy Cinema Café, Brixton htt ...

そして最後に、一体何なのかを見てみると、Twitterがそのまま送信する絵文字であることがわかりました。

この特定のツイートのみを探してデバッグしましたが、私の日食はこのエンコード文字を認識していないようです。問題は、この例外をどのように処理できるかということです。MySQLデータベースの構成を探しましたが、エンコーディングを変更できません(これは必須です)。そのため、この種のツイートの管理を回避するか、この複雑な文字を抑制することを選択できます。

しかし、Javaがそれを認識しない場合、どのようにそれを行うのですか?

4

1 に答える 1

1

<U+[^>]+>データベースに保存する前に、文字列をフィルタリングして、不要な部分を(のような単純な正規表現で)削除することができます。

于 2012-08-31T11:21:50.033 に答える