我在SQL Server数据库表列中存储了一个字符串,该字符串当前是VARCHAR(MAX(,但内容为UTF-16 XML。这是一个样本:
<?xml version="1.0" encoding="utf-16" standalone="yes"?><Content><control name="txtGeneral" value="Hi Bryan,

This is a sample message stored in the database that I need to get out in HTML. I can&amp;#39;t seem to figure out how to get it out into HTML. 

Thanks!

Robot.


-----Original Message-----

Date: 08-21-15 19:57

From: System Test, Microsoft Corp

To: Framework.NET

Subject: RE: RE: RE: RE: 

" /></Content>
数据存储的RAW不是XML/数据类型,但我可以在选择中进行转换(请参见下文(。我通过.NET/ADO将其拉出,因此我将其本地放在弦乐中以在HTML中显示。我只需要将其转换为文本框或HTML元素,以便将其显示在屏幕上。
我可以在t-sql中解析我想要的元素(@value(,但这并不能为我做编码更改。这是我的示例查询:
SELECT TOP 1 CONVERT(XML,CONVERT(NVARCHAR(MAX),m.Content)).value('(/Content/control/@value)[1]', 'varchar(max)')
FROM Messages m
WHERE MessageID = 85713;
我可以使用.NET或T-SQL进行转换。我一次只选择一条消息,因此性能不应该是问题。
这就是我想要的样子:
Hi Bryan,
This is a sample message stored in the database that I need to get out in HTML. I can&amp;#39;t seem to figure out how to get it out into HTML.
Thanks!
Robot.
-----Original Message-----
Date: 08-21-15 19:57
From: System Test, Microsoft Corp
To: Framework.NET
Subject: RE: RE: RE: RE:
通过:https://r12a.github.io/apps/conversion/
谢谢!
有许多严重缺陷:
- 请勿将XML存储在字符串基础上,请使用本机XML类型
- 不要将XML作为字符串处理,请使用本机XML方法
- 如果 - 出于任何原因 - 您必须在字符串级别上处理
NVARCHAR(MAX)
- 切勿使用1字节编码的
VARCHAR(MAX)
。这将忽略额外的转换并可能导致愚蠢的错误。 - 请勿存储XML销售
<?xml blah ?>
。这是指定文件编码所需的。在sql-server中,xml是始终Unicode/ucs 2
如果您可以更改上述内容,则应真正考虑这样做。如果没有,这是一种方法:
首先将VARCHAR(MAX)
施加到NVARCHAR(MAX)
,然后将其施放为XML。与NVARCHAR(MAX)
一起,UTF-16
将不再打扰。然后使用.value()
检索SO命名属性的值。
DECLARE @mockMessages TABLE(Content VARCHAR(MAX));
INSERT INTO @mockMessages VALUES
('<?xml version="1.0" encoding="utf-16" standalone="yes"?><Content><control name="txtGeneral" value="Hi Bryan,

This is a sample message stored in the database that I need to get out in HTML. I can&amp;#39;t seem to figure out how to get it out into HTML. 

Thanks!

Robot.


-----Original Message-----

Date: 08-21-15 19:57

From: System Test, Microsoft Corp

To: Framework.NET

Subject: RE: RE: RE: RE: 

" /></Content>');
SELECT CAST(CAST(m.Content AS NVARCHAR(MAX)) AS XML).value(N'(/Content/control/@value)[1]',N'nvarchar(max)')
FROM @mockMessages AS m;
同样的 - 原理 - 对.Net
有效。
更新:有关编码
的一些单词sql-server既不支持UTF-8,也不支持 real utf-16。有一个1个字节编码,它是扩展的ascii (codepage/conture映射(和一个2字节编码,它是unicode/ucs-2(至少是UTF-8,至少是使用UTF-8通常看到的字符中有99%(。如果您需要输出UTF-8编码,则必须在应用程序中执行此操作。在几乎任何情况下,您都将SQL Server的XML输出(在UCS-2中(视为UTF-16。默认情况下,SQL-Server和.NET-CODE之间的通信是Unicode