sjo*_*urg 6 c# unicode encoding ansi character-encoding
我有一个web服务,它将配置文件返回给低级硬件设备.该设备的制造商告诉我他只支持此配置文件的单字节字符集.
在这个wiki页面上,我发现以下内容应该是单字节字符集:
但是当我在这些字符集上调用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属性.
因此,我不知道如何使用.
基本上,GetMaxByteCount
考虑一个在常规代码中可能永远不需要的边缘情况,特别是它对解码器和代理的说法.这里的要点是一些代码点被编码为代理对,这在不幸的情况下可能意味着它跨越两个调用GetBytes()
/ GetChars
(在编码器/解码器上).因此,理论上,实现可能仍然缓冲单个字节/字符并等待处理,因此GetMaxByteCount
需要警告这一点.
然而!所有这一切只有在您直接使用编码器/解码器时才有意义.如果你正在使用Encoding
诸如此类的操作Encoding.GetBytes
,那么所有这些都是从你身上抽象出来的,你永远不需要知道.在这种情况下,只需使用IsSingleByte
,你会没事的.
归档时间: |
|
查看次数: |
4616 次 |
最近记录: |