我尝试了很多方法将utf8_unicode_ci
列中的MySQL
值从utf8_unicode_ci
转换为shift_jis
,但它没有得到修复。
原始列值位于shift_jis
,并在使用新主机时进行转换。现在这个价值似乎很垃圾,但它在网站前端表现得很好。
表格列值为:ƒEƒCƒ“ƒhEƒŠƒ“ƒO
table column和character set
为character set。
我已经尝试了这个mb_convert_encoding($str, "SJIS", "UTF-8");
和其他许多但是它没有被转换回来。
任何有价值的解决方案?
答案 0 :(得分:0)
首先,通过执行
确定表中的真实内容SELECT col, HEX(col) ...
如果是utf8,则对于片假名和平假名字符,十六进制应为E38xyy
的3字节集。如果没有,那么你可能已经有了SJIS。 (或其他)
假设表格列显示
col VARCHAR(...) ... CHARACTER SET utf8 -- (or utf8mb4)
然后你可以通过
获得SELECT
转换为SJIS
mysqli_charset('sjis');
mysqli_query( ... )
相反,如果您需要将表格从utf8转换为sjis,请执行类似
的操作ALTER TABLE tbl CONVERT TO CHARACTER SET sjis;
这会将tbl
中的所有列以及这些列中的所有数据转换为指定的字符集。
请勿使用mb_*
或其他转化功能;它只是增加了混乱。
ƒEƒCƒ“ƒhEƒŠƒ“ƒO
,如果被解释为latin1,则为十六进制834583438393836845838A8393834F
,如果被解释为sjis(或cp932)为ウインドEリング
- 这是您所期望的吗?
也就是说,ƒEƒCƒ“ƒhEƒŠƒ“ƒO
是sjis ウインドEリング
的Mojibake。如上所述,Mojibake通常通过mysqli_charset
来修复。