如何将错误编码的数据转换为UTF-8?

Bri*_*ian 10 php mysql character-encoding

我正在使用旧的mysql数据库中的数据.这个数据库中有一个表,其字符串列的编码设置为"cp1252 West European(latin1)"(与Windows-1252相同).从mysql命令提示符查询数据时,此字段中的数据表示为:

Obama’s

这应该是读

Obama’s

我试过按照如何将整个MySQL数据库字符集和整理转换为UTF-8的接受答案在MySQL中将字段转换为UTF-8,但没有区别.

我还尝试在该表中插入一个新行,使用Obama’s该字段的文本(同样,从mysql命令提示符).但是,当我查询刚刚插入的同一行时,正确表示了此文本.当字段设置为latin1并且设置为UTF-8时,我尝试执行该插入.结果相同.

这让我相信,当坏数据被插入数据库时​​,它首先被PHP错误编码.这是我变得模糊的地方.

我可以假设数据是通过Web表单插入并使用PHP处理的.PHP在将其插入数据库之前做了什么?它是否将字符串转换为UTF-8,根据此有用页面上表格,它使用三个字节%E2 %80 %99来表示字符.我有这个权利吗?

如果这是正确的,我有什么选择来修复这些数据?我想将表及其字段转换为UTF-8编码,但这似乎无法修复文本.我是否必须编写一个手动将这些字符更改为应该是什么的脚本?

Imr*_*e L 26

select convert(binary convert(field_name using latin1) using utf8) from table_name
Run Code Online (Sandbox Code Playgroud)

如果显示正确,您可以进行更新.

  • 是! 我希望我可以投票10,000次.这样一个简单易行的解决方案. (4认同)