我有一个多语言的
Java应用程序,它可以在
MySql数据库中获取和存储数据.
我把表格整理保留为utf-8-general-ci
对于JDBC连接,我使用useUnicode = true& characterEncoding = UTF-8参数.
像®这样的字符可以正常显示,但中文字符会混乱.
现在,
在添加JVM参数-Dfile.encoding = UTF8
显示中国的字符,但不喜欢®字符.
我该怎么做才能显示来自不同语言的所有字符.
编辑:
输入数据来自UDP数据包,由ByteBuffer上的get方法处理.
和像这样实现的getString方法.
public String getString() {
byte[] remainingBytes = new byte[this.byteBuffer.remaining()];
this.byteBuffer.slice().get(remainingBytes);
String dataString = new String(remainingBytes);
int stringEnd = dataString.indexOf(0);
if(stringEnd == -1) {
return null;
} else {
dataString = dataString.substring(0, stringEnd);
this.byteBuffer.position(this.byteBuffer.position() + dataString.getBytes().length + 1);
return dataString;
}
}
最佳答案 当你在MYSQL中直接尝试角色时,你说的是,只有当java把它放在那里时它才是错误的.
尝试让你的代码查找这些字符并将它们转储到文本文件中或者转到std进行简短的测试以比较文本std输出与发送到db的文本?
还值得存储db事务以查看发送的内容:
至于mysql配置,确保你有表和mysql本身在utf-8模式下运行:
[client]
default-character-set=utf8
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
确保上面已经放入/etc/mysql/my.cnf
对于您在下面运行的每个数据库名称,要使其转储表并为每个表添加一行转换为utf8
select CONCAT("Alter Table `", i.TABLE_NAME, "` CONVERT TO CHARACTER SET utf8;") as MySQLCMD from information_schema.TABLES i where i.TABLE_SCHEMA =
"userbase" INTO OUTFILE '/tmp/userbase.csv' ;
其他值得尝试的东西 – 特别是如果它在这台服务器上写入utf-8:
> Linux系统环境:
Unix Locale
现场
LANG = en_GB.UTF -8-
LC_CTYPE = “en_GB.UTF-8”
LC_NUMERIC = “en_GB.UTF-8”
LC_TIME = “en_GB.UTF-8”
LC_COLLATE = “en_GB.UTF-8”
LC_MONETARY = “en_GB.UTF-8”
LC_MESSAGES = “en_GB.UTF-8”
LC_PAPER = “en_GB.UTF-8”
LC_NAME = “en_GB.UTF-8”
LC_ADDRESS = “en_GB.UTF-8”
LC_TELEPHONE = “en_GB.UTF-8”
LC_MEASUREMENT = “en_GB.UTF-8”
LC_IDENTIFICATION = “en_GB.UTF-8”
LC_ALL =
解决这个问题
sudo dpkg-reconfigure locales select en_GB.UTF-8
update-locale LANG=en_GB.UTF-8
重新启动服务盒,以获取您需要的用户utf-8
完全注销并重新启动并在重新启动之前检查区域设置以确保
它的工作.
现在这意味着您可以在本地ssh上输入日语(如果是putty
在设置utf-8需要选择)
> Tomcat:
将URIEncoding =“UTF-8”添加到
我也加入了
<Connector port="8009"......
protocol="AJP/1.3" URIEncoding="UTF-8" />
3.2
在本地站点的web.xml中(在WEB-INF中)web.xml(不确定是否
这是必不可少的)
<web-app>
<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
然后寻找映射并添加:
<!-- Define filter mappings for the defined filters -->
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我遇到了一些特殊的字符损坏问题,值得在一个优秀的utf-8编辑器中打开保存和查看udp字符串(带有选项以启用utf-8的记事本)或kate或kde上的某些内容.
还可以测试不同的utf-8字符,这些字符可以正常工作,也可能通过std输出或文件无效
http://www.fileformat.info/info/unicode/char/search.htm
并确保字符相同
http://www.fileformat.info/info/unicode/char/00ae/index.htm