Согласно Спольски Я не могу назвать себя разработчиком, поэтому за этим вопросом стоит много стыда ...
Сценарий: ОтПриложение C #, я хотел бы взять строковое значение из базы данных SQL и использовать его в качестве имени каталога.У меня есть защищенный (SSL) FTP-сервер, на котором я хочу установить текущий каталог, используя строковое значение из БД.
Проблема: Все работает нормально, пока я не нажму строковое значение с помощью ""специальный "символ - я не могу правильно закодировать имя каталога, чтобы удовлетворить FTP-сервер.
В приведенном ниже примере кода
- в качестве примера используется "специальный" символ é
- использует WinSCP в качестве внешнего приложения для связи ftps
- не показывает весь код, необходимый для настройки Процесса "_winscp".
- отправляет команды в WinSCP exe, записывая в стандартном процессе вход
- для простоты, не получает информацию из БД, но вместо этого просто объявляет строку (но я сделал .Equals, чтобы подтвердить, что значение из БД совпадает с объявленной строкой)
- делает три попытки установить текущий каталог на сервере FTP, используяразличные кодировки строк - все из которых терпят неудачу
- делает попытку установить каталог, используя строку, которая была создана из созданного вручную байтового массива - который работает
Process _winscp = new Process();
byte[] buffer;
string nameFromString = "Sinéad O'Connor";
_winscp.StandardInput.WriteLine("cd \"" + nameFromString + "\"");
buffer = Encoding.UTF8.GetBytes(nameFromString);
_winscp.StandardInput.WriteLine("cd \"" + Encoding.UTF8.GetString(buffer) + "\"");
buffer = Encoding.ASCII.GetBytes(nameFromString);
_winscp.StandardInput.WriteLine("cd \"" + Encoding.ASCII.GetString(buffer) + "\"");
byte[] nameFromBytes = new byte[] { 83, 105, 110, 130, 97, 100, 32, 79, 39, 67, 111, 110, 110, 111, 114 };
_winscp.StandardInput.WriteLine("cd \"" + Encoding.Default.GetString(nameFromBytes) + "\"");
Кодировка UTF8 меняет é на 101 (десятичное), но FTP-серверу это не нравится.
Кодировка ASCII меняет é на 63 (десятичное), но FTP-серверу это не нравится.
Когда я представляю é как значение 130 (десятичное), сервер FTP доволен, за исключением того, что я не могу найти метод, который сделает это для меня (мне пришлось вручную создавать строку из явных байтов).
Кто-нибудь знает, что я должен сделать со своей строкой, чтобы закодировать é как 130 и сделать FTP-сервер счастливым и, наконец, поднять меня до уровня разработчика 1, объяснив единственное, что разработчик должен понять?