我在表示 时遇到一些问题,这是一个有效的 UTF-16 构造,并且在 Windows 文件名中、在 XML 中显然也有效,以便在 SQL Server XML (2012) 中使用。
以此为例:
DECLARE @Xml xml;
SET @Xml = N'<?xml version="1.0"?><FileName>풜〣</FileName>'
-- Result: XML parsing: line 1, character 41, illegal xml character
但是,这是合法的 Unicode(“Unicode 非字符”''):http://www.fileformat.info/info/unicode/char/ffff/index.htm
所以,我尝试了这个:
DECLARE @Xml xml;
SET @Xml = N'<?xml version="1.0" encoding="utf-16"?><FileName>풜〣</FileName>'
-- Result: XML parsing: line 1, character 59, illegal xml character
那么 - 我应该如何在 XML 中准确地表示这个文件名?我不能只删除这些字符,它们确实是 Get-ChildItem 报告的 字符,并且我需要保留此文件的句柄。
我可以通过将 替换为
ï¿¿
(即 UTF-8)来进行 XML 解析。根据 this link 表示 \uFFFF
然后,我尝试获取此 XML 并将其插入到 nvarchar
列中,我需要它作为文件名的正确表示形式。
DECLARE @Xml xml;
SET @Xml = N'<?xml version="1.0"?><FileName>풜〣ï¿¿ï¿¿</FileName>'
SELECT F.Item.value('.', 'nvarchar(2000)') FROM @Xml.nodes('//FileName') as F(Item)
-- Returns 풜〣ï¿¿ï¿¿ (not correct)
最佳答案
XML 文档中允许的字符集由production 2 定义。 XML 规范。它不包括 U+FFFF(它被 Unicode 定义为非字符,并且在开发 XML 时不允许使用 Unicode 进行信息交换)。
这意味着您不能在 XML 文档中按字面意思表示 U+FFFF,也不能使用 XML 数字字符引用。当然,您可以发明自己的转义机制,或者使用 URI 转义之类的方法来对数据中的字符进行编码;在将数据插入允许 U+FFFF 的应用程序之前,您当然必须取消转义您的表示形式。
我想知道为什么 Windows 文件名中允许使用非字符。
关于sql-server - 如何正确处理 UTF-8 XML 中的 ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022169/