这个问题在这里已经有答案了:
utf-8全程(16个答案)
两年前关门了。
我有一个mysql数据库,数据如下:
温度计-10℃ - 110℃
我从其他网站复制了那个学位符号。
我确实在我的html上声明了如下示例:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
但当我用php调用这些数据到我的网站时,它不会显示出来,它只显示在屏幕上
Thermometer -10?C - 110?C
我还需要做什么??
1条答案
按热度按时间zsbz8rwp1#
我听说一个unicode字符
℃
(十六进制)E28483
)正在变成两个unicode字符°C
(十六进制)C2B0 43
). 我们来验证一下。如果编码为拉丁1,后面的十六进制将是B0 43
.如果字符在数据库中,则执行以下操作
如果它们是用php编写的,那么就这样做
然后报告你得到的是什么咒语。
本文讨论了为什么两个字符的版本可以变成
?C
. 它表明:要存储的字节不编码为utf8/utf8mb4。尤其是十六进制
B0
的拉丁1编码°
.数据库中的列不是字符集utf8(或utf8mb4)。修好这个(使用“显示创建表”。)
另外,检查读取期间的连接是否为utf-8。
同时,据我所知,mysql或php中没有任何东西可以将单字符编码转换为双字符编码。是否涉及其他流程?
在unicode规范中,有一种将1字符版本“分解”为2字符版本的方法,但我不知道什么产品会使用这种方法。另一个例子:
Lj
与Lj
谁在皈依?如果mysql正在从utf8转换为latin1,我会期望
返回两个字符的版本。但是,不,它回来了
'?'
. 我必须假设数据正在经历的其他过程足够好,可以将1个字符转换成2个字符,然后再转换成拉丁文1(这与cp1252、iso-8859-1和iso-8859-15几乎相同)