当在utf8上设置all时,我的字符串怎么能被编码为ASCII

时间:2013-09-27 14:35:10

标签: mysql character-encoding

在使用特殊字母的语言中,字符编码总是有点棘手。

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”),但它没有改变任何东西。

我真的想知道数据编码的时间和方式是什么?

谢谢

PS 2:这是我对mb_detect_encoding

的结果
ASCII ESSAI
ASCII 34
ASCII Bonjour
ASCII 41
UTF-8 ���������������

和来自DOMElement的警告:警告:DOMElement :: setAttribute()[domelement.setattribute]:字符串不是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)但是值已经以某种方式改变了

2 个答案:

答案 0 :(得分:0)

如上所述7位ASCII是UTF-8的子集,因此“Bonjour”被检测为ASCII,“café,3€”被视为UTF-8(尽管你会看到“caf”和“,3”)。

将从SQL填充的变量立即传递给DOMElement(不带utf8_encode应该工作。

答案 1 :(得分:-1)

我用PDO替换了mysqli

有效。 utf8字符串未更改...

所以问题出在mysqli上(不要再使用它了)

@deceze:你可以检测到charset,当一切设置正确时它会很好用