【问题标题】:Unicode MySQL data creating encoding error in XMLUnicode MySQL 数据在 XML 中创建编码错误
【发布时间】:2018-07-25 10:44:51
【问题描述】:

我在 MySQL 中有一个列,其中包含来自许多不同语言和脚本的各种字符,我在其他地方看到 utf8mb4_unicode_ci 是此类数据的一种很好的通用编码,因此我将其设置为该列的排序规则。

但是,当我使用数据在 XML 中创建 AJAX 响应时,无论我将 XML 标头设置为什么,都会遇到编码错误。我试过这样设置 XML 编码:

<?xml version="1.0" encoding="utf8mb4_unicode_ci"?>

然后我得到一个Unsupported encoding 错误。我承认对编码的工作原理有点迷惑,而用多种语言处理它会使情况变得更糟。有没有办法为 XML 指定这种编码,一种从 utf8mb4_unicode_ci 转换为 XML 理解的方式,或者我应该在 MySQL 数据库中使用不同的排序规则设置吗?

编辑:也许我犯了与编码无关的错误?这就是我所拥有的。鉴于此 MySQL 数据库:

CREATE TABLE composer (name VARCHAR(32) COLLATE utf8mb4_unicode_ci);
INSERT INTO composer (name) VALUES('Béla Bartók'),('Antonín Dvořák');

...还有这个 PHP 文件:

<?php

$mysqli = new $mysqli("localhost", $username, $password, $database);
header("Content-Type: text/xml");
print("<?xml version=\"1.0\" encoding=\"utf-8\"?><root>");
$res = $mysqli->query("SELECT * FROM composer");
$res->data_seek(0);
while ($row = $res->fetch_assoc()) {
    print("<name>" . $row['name'] . "</name>");
}
print("</root>");
mysqli_close($mysqli);

在我的浏览器中打开此结果会出现编码错误,然后查看生成的 Web 检查器窗口会显示占位符字符而不是重音字符。这仅仅是因为我用来查看 XML 文件的工具(Safari)吗?我应该直接解析 XML 响应吗?

【问题讨论】:

    标签: mysql ajax xml encoding utf


    【解决方案1】:

    utf8mb4_unicode_ci 是 MySQL 对整个 4 字节范围所称的 UTF-8。
    所以在你的 xml 中只需指定 &lt;?xml version="1.0" encoding="utf-8"?&gt;

    还可以尝试在连接后使用$mysqli-&gt;set_charset("utf8"); 将连接字符集设置为utf8

    【讨论】:

    • 我试过了,但仍然得到编码错误,所以我一定错过了其他东西。我在我的问题中添加了一些示例代码(尽管 MySQL 依赖项阻止我给你一个 JSFiddle)。我感谢您可能拥有的任何其他见解。
    • 数据库中的数据是否正确?你能检查一下phpmyadmin之类的吗?
    • 是的,phpMyAdmin 正在使用正确的字符显示数据。
    • 连接后尝试使用$mysqli-&gt;set_charset("utf8")将连接字符集设置为utf8
    • 成功!你是圣人,穆萨。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2014-06-26
    相关资源
    最近更新 更多