2017-05-29 105 views
2

tl; dr如何使用stream.ReadByte()讀取可變長度編碼的文本?將UTF16作爲字節讀取

龍版本:

我想讀,有一些文字和一些二進制數據的文件。這使用諸如StreamReader這樣的方法創建了一個問題,因此我正在讀取這些字節並將它們轉換爲文本。只要文本是ASCII,這很簡單,因爲一個字節轉換爲一個字符。

但是,如果已知文本以UTF16編碼 - 字符的長度是可變的。那麼如何使用stream.ReadByte()並將其轉換爲UTF16?

+0

以utf16編碼的文本不會比ascii中編碼的文本更長,也不會更少。您正在專注於錯誤的問題,一次解碼單個字節或單個字符或單個代碼點不是很明智。 Encoding.GetString()無論你如何擺動那隻貓,都需要byte []。 –

+0

@HansPassant使用ASCII我只是讀取字節,直到一個等於''\ n''的ACII值。然後,我將所有這些字節提供給'GetString'。對於UTF,我沒有(簡單的)檢查行結束的方法。 – ispiro

+0

這對於utf-16來說並不完全不同,使用ReadUInt16()。採用2個元素的代碼點永遠不會匹配'\ n'。 –

回答

0

感謝意見的幫助以及對another question of mine的回答,我現在知道,由於所有文本都是行,所以我只需讀取2個字節並檢查它們是否爲'\ n'。 UTF16就是這樣,它不會是'\ n'作爲代理對的一部分。