Java 如何在从多种语言读取数据时避免垃圾字符?
我正在解析来自10多种不同语言的rss新闻源 在用php编写API响应客户端之前,所有解析都是用java完成的,数据存储在MySQL中 我在读取数据时经常遇到垃圾字符 我试过什么:Java 如何在从多种语言读取数据时避免垃圾字符?,java,php,mysql,utf-8,character-encoding,Java,Php,Mysql,Utf 8,Character Encoding,我正在解析来自10多种不同语言的rss新闻源 在用php编写API响应客户端之前,所有解析都是用java完成的,数据存储在MySQL中 我在读取数据时经常遇到垃圾字符 我试过什么: 我必须存储utf-8数据。我的数据库、表甚至列的默认字符集都是UTF8 在连接数据库时,我设置了 当我手动运行jar文件来插入数据时,字符的大小看起来很好。但当我为同一个jar文件设置cronjob时,我又开始重新面对这个问题 在英语中,我尤其面临着一些问题,比如在其他方言中,这个字符看起来完全是加比语,我甚至连一个
英语:银行董事局-欧元™s的范围将扩大到金融部门PSU古吉拉特邦启动
રેલવે代码>,对吗?然后Malyalam启动നേപ代码>,对吗?英语应该包括局的
这是一个典型的例子
- 客户端中的字节以utf8正确编码。(
Bureau
用utf8的Ascii/latin1子集编码;但是“
不是Ascii撇号。)
- 您可能默认使用
集合名称拉丁1
(或集合字符集(“拉丁1”)
或…)进行连接。(应该是utf8
)
- 表中的列已声明为
字符集latin1
。(或者可能是从表/数据库继承的。)(应该是utf8
)
数据的修复是“两步改变”
其中长度足够大,而另一个“…”具有任何其他内容(notnull
等)已在列中
不幸的是,如果您有很多列要处理,则需要进行很多修改。您可以(应该)在一对变量中为单个表将所有必要的列修改为VARBINARY
代码的修复方法是将utf8建立为连接;这取决于PHP中使用的api。ALTERs
将更改列定义
编辑
您的VARCHAR
字符集错误。因此,您可以看到Mojibake类似于的«-》
。大多数转换技术都试图保留中的«code>,但这不是您所需要的。相反,在忽略表示拉丁1编码字符的位的旧定义的同时,采取步骤VARBINARY
保留位。第二步再次保留位,但现在声称它们代表utf8字符。jar文件如何组合插入数据库的数据?通过stdin?通过文件?如果需要特定的帮助,您需要显示一些代码。这里是猜测,但系统默认代码页(由“cron”拾取)可能是“C”。i、 e.简单的老式ASCII码。或者将java封装在一个脚本中,该脚本将环境设置为“LANG=UTF-8”。或者在java代码中以UTF-8的形式显式打开文件?我目前正在使用varchar。@HIRATHAKUR-VARBINARY只是一个垫脚石。它用于在应用新编码之前“忘记”旧编码。在一个步骤中进行转换将失败,因为它会误解原始内容。
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;