2
tl; drstream.ReadByte()
を使用して可変長エンコードのテキストを読み取るにはどうすればよいですか?UTF16をバイトとして読み取る
ロングバージョン:
私はいくつかのテキストといくつかのバイナリデータを持つファイルを読み込むしようとしています。これにより、StreamReader
のようなアプローチを使用して問題が発生しました。そのため、バイトを読み込んでテキストに変換しています。 1バイトが1文字に変換されるので、テキストがASCIIである限り、これは単純です。
しかし、テキストがUTF16でエンコードされていることがわかっている場合、文字の長さは可変です。では、どうすればstream.ReadByte()
を使用してUTF16に変換できますか?
utf16でエンコードされたテキストは、もはやasciiでエンコードされたテキストよりも長さが変わっていません。間違った問題に集中している、1バイトまたは1文字または1つのコードポイントを一度にデコードすることは、あまり賢明ではありません。 Encoding.GetString()には、その猫をどのようにスイングさせても、バイト[]が必要です。 –
@HansPassant ASCIIでは、 ''\ n' 'のACII値に等しくなるまでバイトを読み込むだけです。次に、これらのバイトをすべて 'GetString'に送ります。 UTFを使用すると、行末をチェックする(単純な)方法はありません。 – ispiro
utf-16ではまったく異なるわけではありませんが、ReadUInt16()を使用してください。 2つの要素をとるコードポイントは '\ n'には決して一致しません。 –