Загрузить файл с кодировкой спецификации - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно загрузить / создать файл на FTP-сервере с кодировкой UCS-2 LE BOM. Я использую C#.

На основании документации Microsoft , я должен использовать UnicodeEncoding с bigEndian:false и byteOrderMark:true. Вот код:

using (WebClient client = new WebClient())
{
    client.Encoding = new UnicodeEncoding(false, true);
    client.Credentials = myCredentials;
    client.UploadString(path, WebRequestMethods.Ftp.UploadFile, myCsvInString);
}

Созданный файл на FTP-сервере фактически имеет UCS-2 Little Endian. В целях тестирования я попытался переключить byteOrderMark на false и получил тот же результат.

Почему? Чего мне не хватает?

Я знаю, что могу добавить '\uFEFF', но почему это не делается автоматически?

1 Ответ

1 голос
/ 30 апреля 2020

Интерфейс и описание UnicodeEncoding могут быть улучшены в отношении обработки метки порядка байтов. UnicodeEncoding имеет атрибут метка порядка байтов , но единственным методом (кроме Equals и GetHashCode), использующим его, является GetPreamble. Все другие методы и, в частности, основной метод GetBytes не делают.

Идея состоит в том, чтобы гарантировать, что метка порядка байтов будет только когда-либо записана в начале файла. UnicodeEncoding не знает контекста. Поэтому вызывающий может добавить преамбулу, если необходимо (ie. Знак порядка байтов).

Исходя из этой концепции, WebClient.UploadString не может предполагать, что он загружает файл. Это может быть какой-то другой контент Unicode. Так что это не добавляет преамбулу.

Вы должны будете добавить преамбулу самостоятельно. UnicodeEncoding.GetPreamble вернет его.

...