我有一个将配置文件返回到低级硬件设备的webservice。
这个设备的制造商告诉我他只支持这个配置文件的单字节字符集。
this wiki page上,我发现以下应该是单字节字符集:
ISO 8859标准
ISO/IEC 646(我找不到这个here
各种Microsoft/IBM代码页
但是当我在这些字符集上调用encoding.getMaxByteCount(1)时,它总是返回2。
我还尝试了各种其他编码(例如ibm437),但是getmaxbytecount也为其他字符集返回2。
endoding.issinglebyte方法似乎不可靠according to this
在应用程序使用
单字节。对编码将如何进行的假设可能仍然
错了。例如,windows-1252的值为true
encoding.issinglebyte,但encoding.getMaxByteCount(1)返回2。这个
是因为该方法考虑了
上一个解码器操作。
此外,encoding.getMaxByteCount方法也有一些相同的问题according to this
注意,getMaxByteCount考虑来自
以前的解码器操作。因为解码器,传递一个值
对于单字节编码,方法检索2,例如
ASCII码。如果出现以下情况,则应用程序应使用issinglebyte属性
信息是必要的。
因为这个我不知道该用什么了。
Further reading

最佳答案

基本上,GetMaxByteCount考虑的是在常规代码中可能永远不需要的边缘情况,特别是它对解码器和代理的描述。这里的要点是,一些代码点被编码为代理项对,这在不幸的情况下可能意味着它跨越了对GetBytes()/GetChars的两个调用(在编码器/解码器上)。因此,理论上,实现可能仍有一个字节/字符处于缓冲状态,等待处理,因此GetMaxByteCount需要对此发出警告。
然而!所有这些只有在直接使用编码器/解码器时才有意义。如果您正在使用Encoding上的操作,例如Encoding.GetBytes,那么所有这些都是从您身边抽象出来的,您永远不需要知道。在这种情况下,只要使用IsSingleByte就可以了。

07-28 07:46