我有一个web服务,它将配置文件返回给低级硬件设备。 该设备的制造商告诉我他只支持此配置文件的单字节字符。
On this wiki page我发现以下内容应该是单字节字符集:
但是当我在这些字符集上调用Encoding.GetMaxByteCount(1)时,它总是返回2.
我还尝试了其他各种编码(例如IBM437),但GetMaxByteCount也为其他字符集返回2。
方法Endoding.IsSingleByte似乎不可靠according to this
您应该小心应用程序对其值的作用 IsSingleByte。关于编码将如何进行的假设可能仍然存在 是错的。例如,Windows-1252的值为true Encoding.IsSingleByte,但Encoding.GetMaxByteCount(1)返回2.这 是因为该方法考虑了a的潜在剩余代理人 以前的解码器操作。
此外,Encoding.GetMaxByteCount方法存在一些相同的问题according to this
请注意,GetMaxByteCount会考虑潜在的剩余代理 先前的解码器操作。因为解码器,传递一个值 1的方法检索2用于单字节编码,例如 ASCII。如果是这样,您的应用程序应使用IsSingleByte属性 信息是必要的。
因此我不知道该怎么用。
答案 0 :(得分:6)
基本上,GetMaxByteCount
会考虑在常规代码中可能永远不需要的边缘情况,特别是它对解码器和代理的说法。这里的要点是一些代码点被编码为代理对,在不幸的情况下可能意味着它跨越两个调用GetBytes()
/ GetChars
(在编码器/上)解码器)。因此,实现可能理论上仍然缓冲单个字节/字符并等待处理,因此GetMaxByteCount
需要警告这一点。
然而!所有这一切只有在您直接使用编码器/解码器时才有意义。如果您使用Encoding
上的操作,例如Encoding.GetBytes
,则所有这些操作都会从您中抽象出来,您永远不需要知道。在这种情况下,只需使用IsSingleByte
即可。
答案 1 :(得分:0)
也许您应该使用Encoding.Convert Method page on MSDN
中的示例 Encoding.Convert
方法应该提供ASCII编码的字符串。希望单字节..