Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 13

Некорректная кодировка при получении результата выполнения plink.exe

24.04.2017, 14:58. Показов 3144. Ответов 6

Студворк — интернет-сервис помощи студентам
Запускаю plink через свое приложение для выполнения команд на линуксовых машинах и вывожу логи команд в listBox. Если команда не выполняется, то пишется сообщение об ошибке, так вот это сообщение выводится в иероглифах.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
            string ad = textBox_command.Text;
            ad = ad.Replace("\r\n", "\n");
 
            Process cmd = new Process();
            cmd.StartInfo.FileName = @"\plink.exe";
            cmd.StartInfo.UseShellExecute = false;
            cmd.StartInfo.CreateNoWindow = true;
            cmd.StartInfo.RedirectStandardInput = true;
            cmd.StartInfo.RedirectStandardOutput = true;
            cmd.StartInfo.Arguments = "-ssh root@" + ip + " -pw " + Root_Password; //параметры подключения
            cmd.Start();
            cmd.StandardInput.WriteLine(ad);
            cmd.StandardInput.WriteLine("exit");
            string output = cmd.StandardOutput.ReadToEnd();
            output.Remove(0, output.IndexOf('\n') + 1);
         
 
            listBox_screen.Invoke((ThreadStart)delegate ()
            {
                listBox_screen.Items.Add(ip + ":   " + "\n" + output); //вывод логов
            });
выполняю вот эту команду:
Bash
1
2
3
4
umount -l /mnt/update_AIS
mount -t cifs -o user=ivan,password='123',sec=ntlmi,domain=ufssp64.local,file_mode=0777,dir_mode=0777 //10.64.4.14/papka_obmena/update/ /mnt/update_AIS/
cp -r /mnt/update_AIS/* /home/piev/temp/constructor_AIS/patch
umount /mnt/update_AIS
в результате выходит:

Last login: Mon Apr 24 13:52:57 2017 from 10.64.7.3

]0;root@localhost:~[?1034h[root@localhost ~]# umount -l /mnt/update_AIS
umount: /mnt/update_AIS: не примонтирован
]0;root@localhost:~[root@localhost ~]# mount -t cifs -o user=ivan,password='123',sec=ntlmi
,domain=ufssp64.local,file_mode=0777,dir _mode=0777 //10.64.4.14/papka_obmena/update/ /mnt/update_AIS/
]0;root@localhost:~[root@localhost ~]# cp -r /mnt/update_AIS/* /home/piev/temp/constructor_AIS/patch
cp: невозможно создать каталог «/home/piev/temp/constructor_AIS/patch»: Нет такого файла или каталога
]0;root@localhost:~[root@localhost ~]# umount /mnt/update_AIS
]0;root@localhost:~[root@localhost ~]#
]0;root@localhost:~[root@localhost ~]# exit
logout


как получить лог в нормальной кодировки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2017, 14:58
Ответы с готовыми решениями:

Потеря данных при получении результата запроса
Вот такой код при выполнении команды "select * from sqlite_master" выдаёт пустую таблицу с несколькими . При попытке обратиться к чему либо...

Ошибка в получении результата запроса при использовании DataReader
Доброго времени суток! Необходимо получить результат запроса из базы данных, для этого использую метод дата ридера...

Кодировка при выводе результата выполнения команды в текстовый файл
растолкуйте как вывести данные из cmd в текстовый файл в нормальной кодировке. если делать просто: d:\>ipconfig>info.txt то в...

6
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 13
05.05.2017, 13:23  [ТС]
Решил проблему так
C#
1
 string output = Encoding.UTF8.GetString(Encoding.GetEncoding(1251).GetBytes(output));
0
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 29
13.11.2017, 09:07
Добрый день.
Подскажите, как написать такой код в Delphi? Такая же проблема с кодировкой, но я просто запускал plink с параметрами.
Я так понимаю, что нужно создавать процесс через createprocess, но не могу понять как задавать параметры...

Заранее спасибо.

Добавлено через 1 час 11 минут
Процесс создал
Delphi
1
proc:=CreateProcess('plink.exe',pchar(params), nil,nil,false,NORMAL_PRIORITY_CLASS,nil,nil,startupinfo,processinfo);
как теперь вывести в memo из plink?
0
Эксперт .NET
 Аватар для Usaga
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
13.11.2017, 12:10
dima1208, как насчёт того, чтобы спросить в соответствующей ветке Delphi?
0
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 29
13.11.2017, 12:15
Usaga, прошу прощения, просто здесь проблема была один-в-один, решил тут спросить. Проблему решил. Стоит ли сюда выкладывать решение, ввиду того, что тема по С#?
0
Эксперт .NET
 Аватар для Usaga
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
13.11.2017, 12:16
dima1208, выложите, лишним не будет.
0
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 29
13.11.2017, 12:22
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function GetPlinkOutput(): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  BytesRead: Cardinal;
  WorkDir: string;
  Handle: Boolean;
begin
  Result := '';
  with SA do begin
    nLength := SizeOf(SA);
    bInheritHandle := True;
    lpSecurityDescriptor := nil;
  end;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
  try
    with SI do
    begin
      FillChar(SI, SizeOf(SI), 0);
      cb := SizeOf(SI);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      wShowWindow := SW_HIDE;
      hStdInput := GetStdHandle(STD_INPUT_HANDLE);
      hStdOutput := StdOutPipeWrite;
      hStdError := StdOutPipeWrite;
    end;
    Handle := CreateProcess('plink.exe',pchar(params), nil,nil,true,0,nil,nil,SI,PI);
    CloseHandle(StdOutPipeWrite);
    if Handle then
      try
        repeat
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
          if BytesRead > 0 then
          begin
            Buffer[BytesRead] := #0;
            Result := Result + Buffer;
          end;
        until not WasOK or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
      finally
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
      end;
  finally
    CloseHandle(StdOutPipeRead);
  end;
end;
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Button10Click(Sender: TObject);
begin
  params:=pchar('ssh -P 22 -l root -pw XXXXX '+IP+' tail -30 /opt/egais/transporter/l/transport_info.log');
  Memo1.Clear;
  memo1.Font.Name:='Console';
  memo1.Font.Size:=9;
  memo1.Font.Charset:=OEM_CHARSET;
  memo1.Lines.Add(UTF8ToUnicodeString(GetPlinkOutput()));
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.11.2017, 12:22
Помогаю со студенческими работами здесь

Ошибка при получении результата функции
Всем привет. Есть функция ORACLE, которая возвращает данные из таблицы: FUNCTION retrieve_all RETURN table_type IS ...

Ошибка при получении результата из функции
Здравствуйте, помогите разобраться с функцией. При одном запросе на кнопку она выполняется, я получаю результат, а при работу через таймер...

Кодировка при получении данных из сети
Доброго времени суток! Нужно обработать текст, состоящий из кириллицы и полученный от VK API через библиотеку CURL. Получаемые данные...

Кодировка при получении данных из базы PHPBB3
Доброго всем времени суток! Есть форум на движке PHPBB3 и есть сайт, пытаюсь на сайте разместить последние темы форума. Данные выдернул...

Кодировка: замена CP1252 на UTF-8 при получении ответа от php.
Доброго времени суток. Столкнулся с проблемой что в БД вместо русских символов заносит кракозябры. У страницы index.php форма отправки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru