Utf7Encoding Сокращение текста
У меня возникла проблема с классом 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 ответа
Преобразование в байтовый массив через массив символов вроде этого не работает. Если вы хотите, чтобы строки были специфичны для charset 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
Вы неправильно переводите строку в байты utf7. Вам следует позвонить utf.GetBytes()
вместо приведения символов в байт.
Я подозреваю, что в utf7 код ascii, соответствующий '+', фактически зарезервирован для кодирования международных символов Юникода.