當數據涉及中文時,咱們通常使用utf-8編碼來解決字符的顯示問題,但光在程序中支持UTF-8有時仍是不夠的,環境及輸入文件的問題也很突出。下面記錄幾個問題及解決方法:mysql
1. JAVA讀取properties文件時第一個屬性老是讀取不到linux
發現這個很奇怪的現象,用vim查看fileenoding是UTF-8,沒有問題。在文件頭插入一行,property就能夠正常讀取到。sql
最後發現仍是properties文件的編碼問題,UTF-8 和 UTF-8 with BOM 的區別,有BOM的文件在文件頭有encoding信息,從而影響到了properties文件的正常解析數據庫
linux環境下通常不須要BOM信息,經過 file 命令能夠查看文件有無BOM信息vim
找到一種移除BOM信息的方法:bash
find . -name info.txt | xargs -I {} sh -c "sed 's/^\xEF\xBB\xBF//' {} > {}.bak」 find . -name info.txt | xargs -I {} sh -c 'mv {}.bak {}'
2. 調用JDBC寫入數據庫後發現數據是亂碼ide
雖然寫入數據庫的字符是正確的UTF-8編碼,數據庫的encoding也是utf8,字符集是utf8_general_ci,最後顯示在數據庫裏面的確實亂碼編碼
緣由是還少了mysql server的配置server
經過mysql command能夠查看當前數據庫的encodingutf-8
mysql> SHOW VARIABLES LIKE '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE '%collation%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.01 sec)
更改設置的方式是修改數據庫配置文件,個人位置在/etc/mysql/mysql.conf.d/mysqld.cnf,添加配置
[mysqld] character-set-server = utf8 collation-server = utf8_general_ci
更改後重啓數據庫便可