本來以為我搞回英文就不會再被編碼坑了,事實證明我還是太年輕了手動再見.gif
用推特api抓取推文后存入mysql數(shù)據(jù)庫,出現(xiàn)了一些空白內(nèi)容,檢查之后發(fā)現(xiàn)凡是以emoji開頭的text存入數(shù)據(jù)庫的時候會變?yōu)榭铡榱伺懦龁栴}先在推特提供的控制臺里試了試有問題的推文,結(jié)果發(fā)現(xiàn)它抓下來的內(nèi)容是正常的,又在phpstorm里試了試直接打印出抓取內(nèi)容,第一個符號是方塊,后面的內(nèi)容正常,所以覺得問題還是出在mysql上。
后來查了一下mysql從5.5開始支持utf8mb4編碼,也就是可以兼容emoji。通常的utf8用三個字節(jié)來表示字符,而utf8mb4則是四個字節(jié),前者是后者的一個子集,后者能表示更多字符。于是把數(shù)據(jù)庫的編碼改成了utf8mb4,嘗試往數(shù)據(jù)庫寫入emoji表情仍為空,又糾結(jié)了一番發(fā)覺是php代碼設(shè)置PDO的時候出了問題,參考MySQL5.6插入中文亂碼的問題一文設(shè)置charset那一句應(yīng)改為$charset='utf8mb4';。
再次測試能成功插入,不過navicat里emoji還是顯示為問號,不知道是navicat還是windows還是字體問題……