ConsoleAplication c# a Polskie znaki


(xBotekx) #1

Witam, próbuje ustawić polskie znaki w Windows console apliccation. Niestety nie potrafię tego zrobić przeszukałem już cały internet i dalej nic. Próbowałem zmienić kodowanie projektu oraz tego polecenia:
Console.OutputEncoding = Encoding.GetEncoding(“Windows-1250”);
Na początku programu jak i jako parametr przy pobraniu pliku txt.
Zmiana czcionki nie pomaga.

Ma ktoś jakiś pomysł?


(Fizyda) #2

To bardzo słabo szukałeś …


(xBotekx) #3

To widziałem, ale albo robię coś źle albo dalej to nie działa.


(Fizyda) #4

Jaką masz ustawioną czcionkę w konsoli? Może nie obsługuje polskich znaków.


(xBotekx) #5

Próbowałem paru, obecnie mam Lucida.


(Fizyda) #6

Odpal cmd i zobacz czy wchodzą Ci polskie znaki - np komendą echo.


(Fizyda) #7

Jeszcze mnie tknęło, sprawdź kodowanie plików projektu, tutaj jeszcze może być problem. Powinno być takie samo jak to które ustawiasz dla konsoli.


(xBotekx) #8

Polskie znaki wchodzą. Zmiana kodowania działała przy aplikacjach napisanych w c++ ale w c# nie działa.


(Fizyda) #9

Kurcze :confused:. Pamiętam dobrze, że się z tym kiedyś męczyłem, ale nie pamiętam czy znalazłem rozwiązanie czy sobie darowałem (program był na studia więc całkiem prawdopodobne, że sobie darowałem :smiley:).

Spróbuj jeszcze uruchomić program z konsoli, a nie z IDE. Być może IDE uruchamia konsole w jakimś trybie bez wsparcia dla znaków dialektycznych.

EDIT:
Z ciekawości odpalę VMke na której powinienem mieć VS i środowisko dla C#. Jeśli tak jest i uda mi się coś ustalić to dam znać.


(Fizyda) #10

Windows 8.1 z językami PL (programistyczny) i EN, jako domyślne ustawiony PL. Do tego VS 2015 EN wersja Enterprise.

Projekt: C# - Console Application, kod:

namespace ConsoleApplication4
{
	class Program
	{
		static void Main(string[] args)
		{
			Console.WriteLine("Mężczyzna na rowerze pędził leśną ścieżką.");

			Console.ReadLine();
		}
	}
}

Konsola wyświetla wszystkie znaki poprawnie. Nawet nie musiałem ustawiać Encodowania w konsoli.

Szukałbym chyba problemu w ustawieniach systemu.


(xBotekx) #11

Śmieszne jest to ,że mi w tym przypadku też wyświetla poprawnie. Podejrzewam ,że problemem będzie to ,że odczytuje dane z pliku txt. Tylko pytanie jakie kodowanie ustawić? W teorii w konsoli mam kodowanie 852, jednak takiego nie potrafię ustawić ,ponieważ wyświetla mi ,że nie jest to obsługiwana nazwa kodowania ale możliwe ,że po prostu źle je wpisuje.

Już znalazłem jak wpisać poprawnie ale dalej wyskakują krzaczki, zamiast polskich znaków.


(Fizyda) #12

Lol teraz piszesz, że dane odczytujesz z pliku … to definitywnie zmienia postać rzeczy …

Po pierwsze przy odczytywaniu musisz ustawić odpowiedni encoder dla odczytywania z pliku. Możesz też wykryć jakie kodowanie jest ustawione w pliku i takie ustawić dla readera.
Domyślnie dla StreamReadera nie pamiętam jakie jest kodowanie, ale wiem, że nie zgadza się z tym ustawianym przez notatnik.


(xBotekx) #13

Informacja była tylko może za mało wyszczególniona ,że pobieram z pliku.

Na początku programu jak i jako parametr przy pobraniu pliku txt.

Encoder ustawiam ale no właśnie jaki ustawić bo już próbowałem wszystkie najpopularniejsze.

StreamReader plik = new StreamReader(fs, Encoding.GetEncoding(“ibm852”));

Tak wygląda obecnie ustawienie.


(Fizyda) #14

Taki jak kodowanie pliku. A potem musisz to przekonwertować do kodowania konsoli. Ewentualnie ustawić kodowanie konsoli takie jak pliku.

Zerknąłem w kod tego programu o którym pisałem i ja sobie darowałem zabawę z tym kodowanie bo to pod windą powalone dla mnie było. Tylko dla mnie też nie miało dużego znaczenia kodowanie, po prostu prałem dane z pliku A szyfrowałem i zapisywałem do pliku B. Kodowanie zlewałem bo zostawało takie samo. Dlatego też dla StreamReadera/Writera nie podwałem w konstruktorze drugiego argumentu.


(xBotekx) #15

Notatnik domyślnie kodowany jest w utf-8. Tylko wymuszenie takiego kodowania w konsoli nic nie daje. Mam tak projekt zapisany w utf-8 w GetEncoding mam utf-8 i mam wymuszone utf-8 i dalej nie działa.


(Fizyda) #16

Notatnik zapisuje chyba UTF-8 z BOM, a konsole i Readera ustawiasz pewnie na UTF8 bez BOM.


(xBotekx) #17

Dziękuje bardzo za pomoc problemem okazała się oczywiście największa głupota jak to bywa. Po prostu w programie mam też zapis. I dane nadpisały się z jakimś dziwnym kodowaniem. No o tym nie pomyślałem przyznaje się. Jeszcze raz dzięki wielkie.