2012-08-31 50 views
4

我正在處理Twitter中的推文並將它們存儲在數據庫(MySQL)中。如何在Java中處理字符串時避免Twitter表情符號

我有我的過程中運行完美,但有時我得到這樣一個錯誤:

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發送的表情符號as-is

我已經調試過,只看這個speci fic tweet和我的eclipse似乎無法識別此編碼字符。所以問題是,我如何處理這個異常?我尋找配置我的MySQL數據庫,但我不能改變編碼(這是一個要求),所以我的選擇是避免管理這種鳴叫或抑制這種複雜的字符。

但如何做到這一點,如果Java無法識別它?

回答

1

在將數據存儲到數據庫之前,可以過濾字符串並刪除不需要的部分(使用簡單的正則表達式,如<U+[^>]+>)。

+0

我剛剛嘗試過,但它不起作用...我想是enconding,但不是收到的文本。 –

+1

我剛剛發現:'s = s.replaceAll(「[^ \\ x00 - \\ x7f]」,「」);'。這對你有用嗎? – m4573r

+1

最後,我用一個骯髒的解決方法解決了這個問題(但它以相同的方式解決了問題,只是設置了問號而不是該表情符號):'new String(status.getText()。getBytes(「 ISO-8859-1「));' –

相關問題