UTF-8那些事

當數據涉及中文時,我們一般使用utf-8編碼來解決字符的顯示問題,但光在程序中支持UTF-8有時還是不夠的,環境及輸入文件的問題也很突出。下面記錄幾個問題及解決方法:

1. JAVA讀取properties文件時第一個屬性總是讀取不到

發現這個很奇怪的現象,用vim查看fileenoding是UTF-8,沒有問題。在文件頭插入一行,property就可以正常讀取到。

最後發現還是properties文件的編碼問題,UTF-8 和 UTF-8 with BOM 的區別,有BOM的文件在文件頭有encoding信息,從而影響到了properties文件的正常解析

linux環境下一般不需要BOM信息,通過 file 命令可以查看文件有無BOM信息

找到一種移除BOM信息的方法:

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寫入數據庫後發現數據是亂碼

雖然寫入數據庫的字符是正確的UTF-8編碼,數據庫的encoding也是utf8,字符集是utf8_general_ci,最後顯示在數據庫裏面的確實亂碼

原因是還少了mysql server的配置

通過mysql command可以查看當前數據庫的encoding

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

更改後重啓數據庫即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章