我从utf-8mysql表中得到一个ansi字符串而不是utf-8

klh5stk1  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(488)

这个问题在这里已经有答案了

utf-8全程(16个答案)
两年前关门了。
当我从php-mysql共享主机转移到我自己的vps时,我发现从mysql数据库输出utf8用户名的代码 ?�??????� 而不是 鬼神❗ . 我的页面有 utf-8 编码,我有 default_charset = "UTF-8" 在php.ini中,以及 header('Content-Type: text/html; charset=utf-8'); 在我的php文件中,以及 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 它的html部分。
我的数据库具有排序规则utf8\u bin,表具有相同的排序规则。在phpmyadmin中的previos和当前宿主上,我看到了这个数据库记录: 鬼神❗ . 在notepad++中创建ansi文本文件时,粘贴 鬼神❗ 在utf-8菜单中选择encoding->encode 鬼神❗ ,所以我认为它是正确编码的utf-8字符串。
好吧,然后我又加了一句

init_connect='SET collation_connection = utf8_general_bin'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_general_bin
skip-character-set-client-handshake

到my.cnf,现在我的页面显示 鬼神❗ 而不是 ?�??????� . 这和我在phpmyadmin中得到的两个人质的输出是一样的,所以我的方法是正确的。在我的旧主机上,同样的php脚本返回了名为utf-8的web页面 鬼神❗ 在新主机上- 鬼神❗ . 它看起来像是两个utf-8编码的字符串:我得到utf-8字符串,我把它作为ansi字符串交给notepad+,它用正确的utf-8字符串进行编码。
但是当我尝试 utf8_encode() 我明白了 й¬ÑзÒÑвÑâ ,和 utf8_decode() 退货 ?�??????? . 相同结果返回 mb_convert_encoding($name,"UTF-8","ISO-8859-1"); 以及 iconv( "ISO-8859-1","UTF-8", $name); .
那么我怎样才能重现notepad++所做的同样的转换呢?请参阅下面的答案。

yi0zb3m4

yi0zb3m41#

解决方案很简单,但对我来说并不明显,因为我从未在共享主机上看到my.cnf:似乎该服务器有如下设置

init_connect='SET collation_connection = cp1252'
init_connect='SET NAMES cp1252'
character-set-server=cp1252

所以为了不损害我的新服务器上的其他代码,我必须 mysql_query("SET NAMES CP1252"); 在每个使用utf8字符串的php脚本之上。这里的技巧是脚本按原样获取一个字符串(ansi)并输出它,当浏览器被警告页面使用utf-8编码时,它只将我的字符串呈现为utf-8。

相关问题