℃ 从mysql数据库无法显示在网站上

iyzzxitl  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(330)

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

utf-8全程(16个答案)
两年前关门了。
我有一个mysql数据库,数据如下:
温度计-10℃ - 110℃
我从其他网站复制了那个学位符号。
我确实在我的html上声明了如下示例:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

但当我用php调用这些数据到我的网站时,它不会显示出来,它只显示在屏幕上

Thermometer -10?C - 110?C

我还需要做什么??

zsbz8rwp

zsbz8rwp1#

我听说一个unicode字符 (十六进制) E28483 )正在变成两个unicode字符 °C (十六进制) C2B0 43 ). 我们来验证一下。如果编码为拉丁1,后面的十六进制将是 B0 43 .
如果字符在数据库中,则执行以下操作

SELECT col, HEX(col) FROM ...

如果它们是用php编写的,那么就这样做

echo bin2hex($str);

然后报告你得到的是什么咒语。
本文讨论了为什么两个字符的版本可以变成 ?C . 它表明:
要存储的字节不编码为utf8/utf8mb4。尤其是十六进制 B0 的拉丁1编码 ° .
数据库中的列不是字符集utf8(或utf8mb4)。修好这个(使用“显示创建表”。)
另外,检查读取期间的连接是否为utf-8。
同时,据我所知,mysql或php中没有任何东西可以将单字符编码转换为双字符编码。是否涉及其他流程?
在unicode规范中,有一种将1字符版本“分解”为2字符版本的方法,但我不知道什么产品会使用这种方法。另一个例子: LjLj 谁在皈依?
如果mysql正在从utf8转换为latin1,我会期望

CONVERT(CONVERT(BINARY('℃') USING utf8) USING latin1)

返回两个字符的版本。但是,不,它回来了 '?' . 我必须假设数据正在经历的其他过程足够好,可以将1个字符转换成2个字符,然后再转换成拉丁文1(这与cp1252、iso-8859-1和iso-8859-15几乎相同)

相关问题