我正在解析来自10多种不同语言的RSS新闻源。
所有解析都在java中完成,数据存储在MySQL中,然后我用PHP编写的API响应客户端。
我在阅读数据时经常遇到乱码。
我尝试了什么:
当我手动运行jar文件以插入数据时,字符显示正常。但是当我为同一个jar文件设置一个cronjob时,我又开始面对这个问题了。
在英语中,我特别面对像this这样的问题,而在其他本地语言中,这个角色似乎完全是垃圾,我甚至无法识别单个角色。
我有什么遗失的吗?
示例垃圾字符:
Gujarati :“રેàªààªμેમà«àªàààààà«àª°à€«ààપààààààààààààààààààààààààààààààààààààà «€àªàશેતà«<મળશેàªàà³àªªàª°°!“
Malyalam :“à'ààμ‡à'ªàμà'ªà'¾à'³à'¿à'²àμ‡à'àààà'ààμà'³àμà'³à'ààμ<à 'àà'à''à'¿à'°à'àààààààààààààààààà'àà'ààààààààà“
英文:银行董事会扩大金融业PSU的范围
答案 0 :(得分:2)
古吉拉特人开始રેલવે
,对吗? Malyalam开始നേപ
,对吗?英语应该包括Bureau’s
。
这是
的经典案例Bureau
在utf8的Ascii / latin1子集中编码;但’
不是ascii撇号。)SET NAMES latin1
(或set_charset('latin1')
或...)相关联。 (应该是utf8
。)CHARACTER SET latin1
。 (或者它可能是从表/数据库继承的。)(应该是utf8
。)修复数据是一个&#34;两步ALTER&#34;。
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
长度足够大而另一个长度足够...&#34; ...&#34;还有其他任何东西(NOT NULL
等)已经在列上。
不幸的是,如果您要使用很多列,则需要很多ALTER。对于MODIFY
对中的单个表,您可以({should} VARBINARY
ALTERs
所有必要的列。
修复代码是将utf8建立为连接;这取决于PHP中使用的api。 ALTERs
将更改列定义。
修改强>
您VARCHAR
的错误CHARACTER SET
。因此,你会看到像રેલ
这样的Mojibake。大多数转换技术都会尝试保留રેલ
,但这不是您需要的。相反,采取步骤VARBINARY
保留位,同时忽略表示latin1编码字符的位的旧定义。第二步再次保留位,但现在声称它们代表utf8字符。