我有一个尝试从二进制流中解码字符串的不同编码的过程。当我逐步完成时,我得到了一些在我脑海中并没有完全加起来的行为。具体来说,我所做的是:
- 获得将用于在给定编码中对字符进行编码的最大字节数
- 从流中获取字节数
- 用于
Encoding.GetCharCount
确定在这些字节中可能编码了多少个字符(可能是 0 一或二……) - 如果它不为零,我
Encoding.GetString
会从字节数组中抓取字符 - 然后我计算出有多少字节用于对提取的字符进行编码并将流索引推进该数量
- 如果可解码字节数为零,我将索引提前一个字节并再次尝试整个过程……以这种方式,我希望不会错过任何可解码字符
顺便说一句,如果有人注意到上述任何不正确的假设,请随意说...
当我的解码器DedcoderFallbackExceptions
无法解码给定的一组字节时,我将它们设置为抛出。让我感到困惑的是,有时在我调用时会出现异常,GetCharCount
而有时会在我调用时出现异常GetString
。有什么理由应该发生这种情况吗?这实际上是预期的吗?我希望能够在尽可能少的地方可靠地检查可打印字符的存在 - 目前我正在几个地方做这件事。
有什么想法吗?
谢谢,布赖恩
大更新: 我对问题的最初描述似乎有点不足。让我为这个问题添加更多前提:
- 流可能非常大 - 它不适合大多数用户的内存
- 在流中的任何给定位置,我不确定我是否在文本的开头,在文本的中间
- 在流中的任何给定位置,我不知道我是在多字节字符的中间还是开头
- 该流将包含许多实际上不是任何类型的文本的材料,以及少量不同的编码
希望这可以澄清一些问题。到目前为止的回复非常有帮助!请继续!