在具有特殊字母的语言中,字符编码总是有点棘手。
MySQL 数据库服务器采用 UTF-8 Unicode (utf8)
排序规则是 utf8-general-ci
什么时候,使用 mysqli,我从数据库中获取一些数据:
while($row = $result->fetch_assoc()){
foreach ($row as $field=>$value){
print(mb_detect_encoding($value).' '.$value."<br/>");
}
}
字符编码为 ASCII 而不是 UTF-8。它从何而来 ?
更多信息:我的 Apache AddDefaultCharset 是 utf-8
html 页面的编码字符集是 utf-8
我使用从另一个 utf-8 数据库导出的脚本构建数据库
PS:我尝试了 mysqli_set_charset($mysqli, "utf8") 但它没有改变任何东西。
我真的很想知道数据何时以及如何进行 ASCII 编码?
谢谢
PS 2:这是我使用 mb_detect_encoding 得到的结果
ASCII ESSAI
ASCII 34
ASCII Bonjour
ASCII 41
UTF-8 ���������������
以及来自 DOMElement 的警告:警告:DOMElement::setAttribute() [domelement.setattribute]: string is not in UTF-8
PS 3:问题出在 UTF-8 数据上。
在数据库中我有èèèèèèèèèèèèèèèèèèèèèè
如果我在字符串周围使用 utf8_encode,我没有更多问题,结果如下:
ASCII ESSAI
ASCII 34
ASCII Bonjour
ASCII 41
UTF-8 èèèèèèèèèèèèèèè
ASCII 43
所以很明显我的 utf8 字符串是一个 utf8 字符串(参见 mb_detect_encoding)但是值已经以某种方式改变了