2016-05-17 34 views
-1

由于某些原因,当我查询XML字段时,Visual Studio不显示特殊字符。也许我把它们存储错了?这些都是智能引号sql studio无法看到XML中的特殊字符

这里的查询:

select CustomFields from TABLE where ID=422567 FOR XML PATH('') 

This is how it looks in VX

当我复制/粘贴到记事本+我看到这一点:

What are STS and CCH?

什么是STS和CCH?

+1

设置传输状态/取消字符 - 基于[字符引用](https://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF#endnote_CCH) – lad2025

+0

@ lad2025有趣。仍然不确定他们为什么不显示。 – sproketboy

+0

请张贴您的XML不作为图片,请编辑您的问题与copy'n'pasteable文字... – Shnugo

回答

1

字符串 - 正如你一定知道的 - 只是数字链。根据代码页,编码,很少或大端他们的意思,以及他们如何被解释为...

只要有这个

SELECT 'test' AS NormalText 

     --non printable characters 
     --they are things like backspace, carriage return 
     ,CHAR(0x6) AS ACK --DEC 7 
     ,CHAR(0x7) AS BEL --DEC 9 
     ,CHAR(0x1A) AS CR --DEC 13 
     ,CHAR(0x1B) AS ESC --DEC 27 

     --printable characters from 0x21 (DEC 33) up to 0x7F (DEC 127) - (almost) not depending on encoding 
     ,CHAR(0x41) AS BigA --DEC 65 
     ,CHAR(0x7E) AS Tilde --DEC 126 

     --extended - from 0x80 (DEC 128) - very much depending on encoding! 
     ,CHAR(0x93) AS STS --DEC 147 
     ,CHAR(0x94) AS CCH --DEC 148 
     ,CHAR(0x93) + 'test' + CHAR(0x94) AS Mixed 
FOR XML PATH('') 

一看这将产生此

<NormalText>test</NormalText> 
<ACK>&#x6;</ACK> 
<BEL>&#x7;</BEL> 
<CR>&#x1A;</CR> 
<ESC>&#x1B;</ESC> 
<BigA>A</BigA> 
<Tilde>~</Tilde> 
<STS>“</STS> 
<CCH>”</CCH> 
<Mixed>“test”</Mixed> 

正如你看到的那样,有些字符必须被编码,因为没有字符表达,其他字符与他们相应的“图片”一起显示。

用DEC 127以上的代码输入危险地形。根据您读取的位置,相同的字符串可能会产生完全不同的输出。

“STS”和“CCH”记事本显示给你,取自C1 Controls and Latin-1 Supplement

这个和你写的Smart qoutes指向this。为了允许智能卡特存在开始结束的一般字符,它们被装配打开和关闭清点标记“替换”。

最后,SQL Server中的XML始终是UTF16。看看this feff0093 and feff0094。这些是UTF16绑定到0x930x94的符号。我的小例子清楚地表明了这一点......

所以问题是:为什么你的照片不显示

我不知道......你放在第一行的select不会“产生”这个XML,而是将现有的XML从列“CustomFields”中取出。我相当肯定,这不是一个“真正的”XML列......

+0

好的谢谢。我没有正确存储XML - 我应该使用这些字符的实体。 – sproketboy