В моем приложении .NET 3.5 C# я преобразую массив байтов в кодировке unicode в строку.Преобразование Юникода в Линии строк, ведущий знак байтового байта
Массив байт выглядит следующим образом:
{255, 254, 85, 0, 83, 0, 69, 0}
Использование Encoding.Unicode.GetString(var)
, преобразовать массив байтов в строку, которая возвращает:
{65279 '', 85 'U', 83 'S' , 69 'E'}
Ведущий характер, 65279
, кажется, Zero Width No-Break Space, который используется как знак байтового заказа в кодировке Unicode, и его внешний вид вызывает проблемы в остальной части моего приложения.
В настоящее время обходной путь, который я использую, - var.Trim(new char[]{'\uFEFF','\u200B'});
, который работает просто отлично.
Но на самом деле вопрос, не должен GetString
позаботиться об удалении знака порядка байтов? Или я делаю что-то неправильно при преобразовании массива байтов?
@bzlm: _ "Encoding.Unicode, скорее всего, вернет кодировщик UTF-16" _ - нет "вероятно" об этом. Это было сделано _better_, так как это документировано: [«Кодировка для формата UTF-16 с использованием порядка байтов младшего байта».] (Https://msdn.microsoft.com/en-us/library/ system.text.encoding.unicode (v = vs.110) .aspx) –
Почему вы обрезаете '\ u200B'? – xanatos