UTF-8那些事
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
更改后重启数据库即可
以上是关于UTF-8那些事的主要内容,如果未能解决你的问题,请参考以下文章