.NET编码中的字符串是不可知的

本文关键字:不可知 字符串 NET 编码 | 更新日期: 2023-09-27 18:21:00

我的问题很简单:.net编码中的字符串是不可知的吗?

我之所以这么问,是因为当我获取一个xml文件时,我知道该文件是用一些windows-1252代码页元素(即智能引号)编码的,在调试器中查看保存我的xml的字符串时,似乎想将单个"智能引号"解析为一个带问号的三角形。这让我怀疑.NET是否断言保存XML的字符串是UTF8,因此无法解决差异。

如果是这样的话,这是一个问题,因为如果字符串被转换,那么我的Web服务将失败,因为它无法识别三角形/问号。

请帮忙。

.NET编码中的字符串是不可知的

字符串总是UTF-16。任何传入或传出数据都必须转换为该编码。

如果您使用适当的XML阅读库,它很可能会为您处理它,只要XML具有适当的XML prolog(但不需要Windows-1252支持以符合XML规范)。

.NET对内存中的所有字符串使用UTF16(代理字符可能会被放入需要的位置)。

当加载一些文本文件时,它默认将文件解释为UTF-8或您告诉它使用的任何编码。

由于您没有显示任何源代码,我只能推测您是如何读取/加载XML的,以及XML的序言中是否有正确的charset。。。根据方法的不同,.NET将默认为UTF-8,并在内存中表示为UTF16。。。

如果以上内容没有帮助,请提供更多详细信息。。。

否,.NET中的字符串以Unicode代码点的形式存储在有限的16位范围内。对于那些溢出的字符,将使用代理字符。

不要将上述存储器内表示与高度依赖于所选编码方案的存储表示混淆。

字符串类(大部分)是编码不可知的。您的错误来自于将字节解码为字符串的过程。这个过程对你不起作用。你需要告诉解码器使用你的特殊编码。

为什么字符串只有,而大多数是不可知的?这是因为它们将unicode字符编码为16位值的序列。但是,尽管一个16位的值只有64k个可能的值,但一个unicode字符可以有大约100万个不同的值。因此,也需要进行编码过程。这是通过使用代孕来实现的。字符串类本质上是UTF-16。

否。来自MSDN:

字符串是Unicode字符的顺序集合。