2010-11-19 18 views
1

'+4' dizisini kesen Utf7Encoding sınıfı ile ilgili bir sorun yaşıyordum. Bunun neden olduğunu bilmek isterdim. Bayt [] dizisinden dize almak için Utf8Encoding'i denedim ve honky dory çalışıyor gibi görünüyor. Utf8 ile bilinen herhangi bir sorun var mı? Esasen, rtf dizesinden html oluşturmak için bu dönüşüm tarafından üretilen çıktıyı kullanıyorum.Utf7Yeni Kodlama Metin kesilmesi

UTF7Encoding utf = new UTF7Encoding(); 
    UTF8Encoding utf8 = new UTF8Encoding(); 

    string test = "blah blah 9+4"; 

    char[] chars = test.ToCharArray(); 
    byte[] charBytes = new byte[chars.Length]; 

    for (int i = 0; i < chars.Length; i++) 
    { 

     charBytes[i] = (byte)chars[i]; 

    } 


    string resultString = utf8.GetString(charBytes); 
    string resultStringWrong = utf.GetString(charBytes); 

    Console.WriteLine(resultString); //blah blah 9+4 
    Console.WriteLine(resultStringWrong); //blah 9 
+0

bu C# mı ? Öyleyse, bunu etiketlemek isteyebilirsiniz. –

+0

teşekkürler, ben de yaptım. – dexter

+0

İlginç bul, kesinlikle beklenmeyen bir davranış. – leppie

cevap

1

Böyle bir char dizisi aracılığıyla bayt dizisine dönüştürme çalışmıyor. Eğer dizeleri istiyorsanız charset özgü byte[] bu gibi:

UTF7Encoding utf = new UTF7Encoding(); 
UTF8Encoding utf8 = new UTF8Encoding(); 

string test = "blah blah 9+4"; 

byte[] utfBytes = utf.GetBytes(test); 
byte[] utf8Bytes = utf8.GetBytes(test); 

string utfString = utf.GetString(utfBytes); 
string utf8String = utf8.GetString(utf8Bytes); 

Console.WriteLine(utfString); 
Console.WriteLine(utf8String); 

Çıktı:

filan 9 + 4

filan 9 + 4

+0

Tamam, neden Utf8Encoding yanlış yapılandırılmış bayt dizisini beklediğim gibi davranıyor? – dexter

+0

"char" ve "byte" gösterimlerinin çakıştığından emin olun - genel durumda, "Encoding" sınıfınız "string" ile "byte [] arasında eşleştirmek için kullanılır, herhangi bir çok baytlı karakter kümesi için olabilir. 'string' her zaman Unicode'dir. –

1

Sizin doğru bayt utf7 dize transating değildir: Burada

pasajıdır. Karakterleri bayt olarak yazmak yerine utf.GetBytes() numaralı telefonu aramalısınız.

utf7'de '+' ile ilgili ascii kodunun aslında uluslararası unicode karakterlerini kodlamak için ayrılmış olduğundan şüpheleniyorum.