Unicode MySQL 数据在 XML 中创建编码错误

Unicode MySQL data creating encoding error in XML

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

但是,当我使用数据在 XML 中创建 AJAX 响应时,无论我如何设置 XML [=38=,我都会遇到编码错误] 到。我试过这样设置 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);

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

utf8mb4_unicode_ci 是 MySQL 为完整的 4 字节范围调用的 UTF-8。
因此,在您的 xml 中只需指定 <?xml version="1.0" encoding="utf-8"?>

也尝试在连接后使用 $mysqli->set_charset("utf8"); 将连接字符集设置为 utf8