2017-05-29 12 views
2

tl; drstream.ReadByte()を使用して可変長エンコードのテキストを読み取るにはどうすればよいですか?UTF16をバイトとして読み取る

ロングバージョン:

私はいくつかのテキストといくつかのバイナリデータを持つファイルを読み込むしようとしています。これにより、StreamReaderのようなアプローチを使用して問題が発生しました。そのため、バイトを読み込んでテキストに変換しています。 1バイトが1文字に変換されるので、テキストがASCIIである限り、これは単純です。

しかし、テキストがUTF16でエンコードされていることがわかっている場合、文字の長さは可変です。では、どうすればstream.ReadByte()を使用してUTF16に変換できますか?

+0

utf16でエンコードされたテキストは、もはやasciiでエンコードされたテキストよりも長さが変わっていません。間違った問題に集中している、1バイトまたは1文字または1つのコードポイントを一度にデコードすることは、あまり賢明ではありません。 Encoding.GetString()には、その猫をどのようにスイングさせても、バイト[]が必要です。 –

+0

@HansPassant ASCIIでは、 ''\ n' 'のACII値に等しくなるまでバイトを読み込むだけです。次に、これらのバイトをすべて 'GetString'に送ります。 UTFを使用すると、行末をチェックする(単純な)方法はありません。 – ispiro

+0

utf-16ではまったく異なるわけではありませんが、ReadUInt16()を使用してください。 2つの要素をとるコードポイントは '\ n'には決して一致しません。 –

答えて

0

コメントとの回答とanother question of mineのおかげで、私はすべてのテキストが行になるので、私がする必要があるのは2バイトを読み込み、それらが '\ n'であることを確認することです。 UTF16は、サロゲートペアの一部としてのみ '\ n'にならないようなものです。

関連する問題