代码之家  ›  专栏  ›  技术社区  ›  TobyRush

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

  •  1
  • TobyRush  · 技术社区  · 6 年前

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

    然而,当我使用数据在XML中创建AJAX响应时,无论我将XML头设置为什么,都会出现编码错误。我尝试过这样设置XML编码:

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

    但我得到了 Unsupported encoding 错误我承认我对编码的工作方式有点困惑,用多种语言处理它会让事情变得更糟。有没有一种方法可以为XML指定这种编码,一种从 utf8mb4\u unicode\u 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响应?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Musa    6 年前

    utf8mb4_unicode_ci 对于完整的4字节范围,MySQL称之为UTF-8。
    所以在xml中只需指定 <?xml version="1.0" encoding="utf-8"?>

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