我有一個過程,試圖從二進制流中解碼不同的字符串編碼。當我通過它時,我會收到一些行爲,這些行爲在我的腦海裏並不那麼完美。具體地講,我做的是:.NET流解碼器行爲
- 獲得其中將用於一個字符在給定的編碼
- 搶字節的量從流
- 使用
Encoding.GetCharCount
編碼字節,以確定只是的最大數目多少個字符可能會在這些字節被編碼(可能是0一兩個...) - 如果不爲零,我使用
Encoding.GetString
抓住人物出來的字節數組的 - 我然後找出多少字節被用來編碼提取的cha如果可解碼的字節數爲零,則將索引提前一個字節,然後再次嘗試整個事物...以這種方式,我希望不會錯過任何可解碼的字符
順便說一句,如果有人注意到在上述的任何不正確的假設,隨便這麼說...
我有我的解碼器設置扔DedcoderFallbackExceptions
時,他們無法解碼一組給定的字節。令我困惑的是,有些時候,我打電話給GetCharCount
的時候會出現異常,有時我會打電話給GetString
。這有什麼理由應該發生?這是否事實上是預期的?我希望能夠在儘可能少的地方可靠地檢查可打印字符的存在 - 目前我正在幾個地方進行打印。
有什麼想法?
感謝, 布賴恩
大更新: 似乎缺少了一下我的問題的初步描述。讓我多了一些房屋增加的問題:
- 流可能是非常大 - 它不會適合在內存對於大多數用戶
- 在任何給定的位置流我不知道我是在文本的開始處,在文本中間
- 在流中的任何給定位置我不知道我是否處於多字節字符的中間或開始處
- 流將包含很多材料其實不是任何形式的文字,以及不同的編碼一知半解
希望這澄清了一些問題。迄今爲止的迴應非常有幫助!請繼續!
我真的不明白,爲什麼你要做到這一點。如果可能的話,最有效的方法是將整個事物讀入內存並一次處理。 – 2009-07-01 23:18:53