2016-04-20 27 views
6

私はUTF8 byte[](つまり非常に大きいサイズ)を持っています。私は1024バイトだけを切り捨てて、それを文字列に変換したいと思います。UTF8バイト[]から文字列への変換

Encoding.UTF8.GetString(byte[], int, int)これは私のためです。最初に1024バイトを短くしてから変換した文字列を返します。

しかし、この変換では、最後の文字が2バイトで作られており、その最初のバイトの範囲内に収まると、別のバイトが範囲外である、それは変換後の文字列で、その文字のため?を表示さUTF8文字セットのものである場合。

この?が変換された文字列に含まれないようにする方法はありますか?

答えて

6

これは、Decoderクラスが対象です。が残されている

Encoding.UTF8.GetDecoder().GetChars(buffer, 0, 1024, charBuffer, 0) 
コード・ポイントが中央で分割されているもちろん

Decoder:正しく部分コード・ポイントを処理するのに十分な状態を維持しながら、それは、あなたがcharデータにbyteデータをストリーミングすることができますその状態では "部分的な文字"ですが、それはあなたのケースではあなたに関係しません(そして、他のすべてのユースケースでは望ましいです:))。

+0

ポインタの処理方法がわかりません。あなたのソリューションの助けや代替手段はありますか? – pratik03

+0

@ pratik03ポインタは関係ありません。単に 'char *'(と 'byte *')オーバーロードの代わりに 'char []'(と 'byte []')オーバーロードを使用してください。 – Luaan

関連する問題