c# – 如何使用单字节字符编码?

c# – 如何使用单字节字符编码?,第1张

概述我有一个web服务,它将配置文件返回给低级硬件设备. 该设备的制造商告诉我他只支持此配置文件的单字节字符集. 在this wiki page我发现以下应该是单字节字符集: > ISO 8859 > ISO / IEC 646(我找不到这个here) >各种Microsoft / IBM代码页 但是当我在这些字符集上调用Encoding.GetMaxByteCount(1)时,它总是返回2. 我还尝 我有一个web服务,它将配置文件返回给低级硬件设备.
该设备的制造商告诉我他只支持此配置文件的单字节字符集.

在this wiki page我发现以下应该是单字节字符集:

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

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

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

方法Endoding.IsSingleByte似乎不可靠according to this

You should be careful in what your application does with the value for
IsSingleByte. An assumption of how an EnCoding will proceed may still
be wrong. For example,windows-1252 has a value of true for
EnCoding.IsSingleByte,but EnCoding.GetMaxByteCount(1) returns 2. This
is because the method consIDers potential leftover surrogates from a
prevIoUs decoder operation.

此外,方法EnCoding.GetMaxByteCount也有一些相同的问题according to this

Note that GetMaxByteCount consIDers potential leftover surrogates from
a prevIoUs decoder operation. Because of the decoder,passing a value
of 1 to the method retrIEves 2 for a single-byte enCoding,such as
ASCII. Your application should use the IsSingleByte property if this
information is necessary.

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

Further reading.

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

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

总结

以上是内存溢出为你收集整理的c# – 如何使用单字节字符编码?全部内容,希望文章能够帮你解决c# – 如何使用单字节字符编码?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存