2016-04-20 40 views
6

UTF8 byte[] sonsuz boyutta (yani çok büyük boyutlu) var. Yalnızca 1024 bayta kırpmak ve dizgiye dönüştürmek istiyorum.UTF8 byte [] dize dönüşümü

Encoding.UTF8.GetString(byte[], int, int) bunu benim için yapar. İlk önce 1024 bayt kısalır ve sonra dönüştürülmüş dizesini verir.

Ancak bu dönüşmede, son karakter 2 baytlık olan ve ilk baytı aralıkta ve başka bir bayt aralığın dışında olan UTF8 karakter kümesinde ise, dönüştürülen dizede bu karakter için ? görüntülenir.

Bu ?'un dönüştürülmüş dizede gelmemesi için herhangi bir yolu var mı?

cevap

6

Decoder sınıfının anlamı şudur. Bir bırakılır

Encoding.UTF8.GetDecoder().GetChars(buffer, 0, 1024, charBuffer, 0) 
kod noktası ortada bölünür Tabii

, Decoder: doğru kısmi kod noktaları işlemek için yeterli durumunu korurken, sen char veri içine byte veri akışı sağlar Durumunda "kısmi char", ama sizin durumunuzda sizi ilgilendirmez (ve diğer tüm kullanım durumlarda :)).

+0

İşaretçilerle nasıl baş edeceğimi bilmiyorum. Çözümünüzün herhangi bir yardım veya alternatifi? – pratik03

+0

@ pratik03 İşaretçiler dahil değil - sadece 'char * '(ve' byte * ') aşırı yüklenme yerine' char [] '(ve' byte [] ') yükünü kullanın. – Luaan