如何将带有重音的文本转换为utf-8格式

本文关键字:转换 文本 utf-8 格式 | 更新日期: 2023-09-27 18:09:04

我试图创建一个脚本,插入一些行在一个表中,有一个保存为IMAGE类型的xml。xml使用utf-8格式。

当我用一些带有重音的文本进行测试时,我在XML读取时(通过c#中的XmlDocument)得到了"非法字符"错误。

所以我想通过某种方式将带重音的字符串转换为utf-8格式。

示例:当我通过XmlWriter(在c#中)保存一个包含"ã"的字符串时,它会自动将其转换为"ã"以表示在数据库中保存该字符。而且效果非常好!但我想用SQL脚本来做。所以我们说"s o Paulo"这个词,它节省了"São Paulo"。但是只使用SQL Server(脚本),我只是不能使xml有效的单词" s o Paulo"。

仅为更多的技术细节,我正在使用具有此问题的特定varchar/nvarchar,所以我只需要将文本转换为对xml读取有效的"unicode"或"utf-8"文本。使用Oracle工作得很好,因为它保存了口音和正常读取(使用BLOB类型),但我需要在SQL Server上使用相同的脚本。

我已经尝试了一些整理,转换和转换,我在网上找到的,但没有为我工作。

有谁知道我能做什么吗?

如何将带有重音的文本转换为utf-8格式

请试试:

CREATE TABLE testXML(test XML);
GO
INSERT INTO testXML(test) VALUES ('<root><r>plain text</r></root>')
                                ,('<root><r>São Paulo</r></root>');
GO
SELECT x.y.query('.'), x.y.value('.','varchar(max)')
FROM testXML
CROSS APPLY test.nodes('/root/r') AS x(y);
GO
DROP TABLE testXML;
/*
Result
<r>plain text</r>   plain text
<r>São Paulo</r>    São Paulo
*/

这里与IMAGE相同,并且周围有很多cast。提供相同的结果:

    CREATE TABLE testXML(test IMAGE);
    GO
    INSERT INTO testXML(test) VALUES (CAST(CAST('<root><r>plain text</r></root>' AS XML) AS VARBINARY(MAX)))
                                    ,(CAST(CAST('<root><r>São Paulo</r></root>' AS XML) AS VARBINARY(MAX)));
    GO
    SELECT x.y.query('.'), x.y.value('.','varchar(max)')
    FROM testXML
    CROSS APPLY (SELECT CAST(CAST(test AS VARBINARY(MAX)) AS XML)) AS tbl(x)
    CROSS APPLY tbl.x.nodes('/root/r') AS x(y);
GO
DROP TABLE testXML;