如何用单字节字符编码?

sjo*_*urg 6 c# unicode encoding ansi character-encoding

我有一个web服务,它将配置文件返回给低级硬件设备.该设备的制造商告诉我他只支持此配置文件的单字节字符集.

这个wiki页面上,我发现以下内容应该是单字节字符集:

  • ISO 8859
  • ISO/IEC 646(我在这里找不到这个)
  • 各种Microsoft/IBM代码页

但是当我在这些字符集上调用Encoding.GetMaxByteCount(1)时,它总是返回2.

我还尝试了其他各种编码(例如IBM437),但GetMaxByteCount也为其他字符集返回2.

该方法Endoding.IsSingleByte似乎不可靠,根据本

你应该小心你的应用程序对IsSingleByte的值做了什么.假设编码将如何进行可能仍然是错误的.例如,Windows-1252对于Encoding.IsSingleByte的值为true,但Encoding.GetMaxByteCount(1)返回2.这是因为该方法考虑了先前解码器操作的潜在剩余代理.

另外,方法Encoding.GetMaxByteCount有一些相同的问题,根据本

请注意,GetMaxByteCount会考虑先前解码器操作中潜在的剩余代理.由于解码器,将值1传递给方法会检索2以进行单字节编码,例如ASCII.如果需要此信息,您的应用程序应使用IsSingleByte属性.

因此,我不知道如何使用.

进一步阅读.

Mar*_*ell 6

基本上,GetMaxByteCount考虑一个在常规代码中可能永远不需要的边缘情况,特别是它对解码器和代理的说法.这里的要点是一些代码点被编码为代理对,这在不幸的情况下可能意味着它跨越两个调用GetBytes()/ GetChars(在编码器/解码器上).因此,理论上,实现可能仍然缓冲单个字节/字符并等待处理,因此GetMaxByteCount需要警告这一点.

然而!所有这一切只有在您直接使用编码器/解码器时才有意义.如果你正在使用Encoding诸如此类的操作Encoding.GetBytes,那么所有这些都是从你身上抽象出来的,你永远不需要知道.在这种情况下,只需使用IsSingleByte,你会没事的.