Utf7Encoding Сокращение текста - PullRequest
1 голос
/ 19 ноября 2010

У меня возникла проблема с классом Utf7Encoding, усекающим последовательность «+4». Мне было бы очень интересно узнать, почему это происходит. Я попытался Utf8Encoding для получения строки из массива byte [], и это, кажется, работает хонки Дори. Есть ли такие известные проблемы с Utf8? По сути, я использую выходные данные, полученные в результате этого преобразования, для создания html из строки rtf.

Вот фрагмент:

    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  

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Преобразование в байтовый массив через массив символов вроде этого не работает.Если вы хотите, чтобы строки соответствовали кодировке byte[], сделайте следующее:

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);

Вывод:

бла-бла 9 + 4

бла-бла 9+4

1 голос
/ 19 ноября 2010

Вы неправильно переводите строку в байты utf7.Вы должны вызвать utf.GetBytes() вместо преобразования символов в байт.

Я подозреваю, что в utf7 код ascii, соответствующий '+', фактически зарезервирован для кодирования международных символов Юникода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...