kodowanie znaków w wyjściu konsolowym

0

Mam jeden program który działa, ale tylko na konsoli. Jednak osoba która będzie korzystać z tego programu postanowiła, że chce mieć okienko, ale również chce mieć wersję konsolową, żeby mieć możliwość wrzucenia tego na weba. Napisałem więc drugi program, który zawiera tylko interfejs okienkowy, program uruchamia w nowym procesie ten pierwszy program i w obiekcie RichText ma wypisać zwrócony wynik. Nie byłoby problemu, gdyby nie fakt, że wyświetlany tekst zawiera polskie znaki.

Program konsolowy uruchomiony z konsoli wyświetla znaki prawidłowo, tekst z bazy danych (utf8), również wyświetla polskie znaki bez problemu, ale jak pobieram wyjście z programu konsolowego do graficznego to otrzymuje napisy w stylu:

Program uruchomiony z parametrem wykona nast©pujĄce akcje:
Parametry:
l - buduje baz© danych z dost©pnych ...

Byłbym wdzięczny za pomoc i proszę nie pisać, że temat był wałkowany nie jeden raz. Jestem kompletnie zielony z C# a program muszę właśnie w nim napisać.

1

Prawie na pewno źle ten tekst pobierasz - pokaż ten fragment (wczytanie tekstu z konsoli) to będzie można coś wymyślić.

0
Process program = new Process();
program.StartInfo.FileName = "iui.exe";
//program.StartInfo.Arguments = "";
program.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
program.StartInfo.UseShellExecute = false;
program.StartInfo.RedirectStandardOutput = true;
program.Start();
program.WaitForExit();
string output = program.StandardOutput.ReadToEnd();

//teraz wstawienie do RichText
this.richTextBox1.Text = output;
1

Kod jest na tyle prosty że na pierwszy rzut oka wszystko jest ok.
Pierwsze co przychodzi do głowy w takich przypadkach - złe kodowanie. Niestety nie ma bezpośredniego sposoby na zmianę kodowania StreamReadera, więc musisz utworzyć obiekt tymczasowy:

StreamReader r = new StreamReader(program.StandardOutput.BaseStream, Encoding.ASCII);
string output = r.ReadToEnd();

Jeśli nie zadziała, sprawdź jeszcze inne parametry Encoding.

0
MSM napisał(a)
StreamReader r = new StreamReader(program.StandardOutput.BaseStream, Encoding.ASCII);
string output = r.ReadToEnd();

Po wpisaniu tego do programu dostałem błąd, odnoszący się do pierwszej linijki zacytowanego powyżej kodu:
System.NullReferenceException: Object reference not set to an instance of an object.

Edycja:
błąd był z mojej strony, w nazwach zmiennych, ale to już naprawiłem. Wyniki mam następujące:

  • Encoding.ASCII - zamiast polskich znaków wypisuje znaki zapytania
  • Encoding.Unicode - cały tekst zamienia mi się na jakieś znaki przypominające chińskie, japońskie znaki
  • Encoding.UTF32 - podobnie jak wyżej
  • Encoding.UTF7 - wyraz "następujące" wygląda tak: "nast©puj¥ce"
  • Encoding.UTF8 - wyraz "następujące" wygląda tak: "nast�puj�ce"

Szukam sposobu jak wypisać kolejne bity danego znaku, żeby móc określić jakie otrzymuje w ogóle kodowanie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.