Brak polskich znaków w pliku

0

Witam

Szukam pomocy w rozwiązaniu problemu z polskimi znakami w pliku.

Nie znalazłem rozwiązania w Internecie.

Gdy otwieram CMD i wpisuję komendę net share to wszystko w konsoli wyświetla się z polskimi znakami.
Gdy natomiast wyświetlę komendę z zapisaniem do pliku net share > C:\aa2.txt to w pliku brakuje polskich znaków.

Taka sam sytuacja jest gdy chce to wykonać w c++

ShellExecute(0, "open", "cmd.exe", "/C net share > C:\\aa2.txt", 0, SW_HIDE);
0

A w czym podglądasz ten plik wynikowy?

0

Otwórz plik w Notepad++ i poeksperymentuj z kodowaniem pliku.

0

Otwieram ten plik w Notatniku i tam jest bez polskich znaków
Otwieram w Notatnik ++ i tam są polskie znaki

Wczytuję do pola memo i tam nie ma polskich znaków.

Jak w pliku txt wpisze polskie znaki z klawiatury to wszystko wyświetla się prawidłowo.

Oszaleć można.

0

@rambo: systemowy notatnik jest badziewny, więc go nie używaj. Korzystaj z Notepad++ do wszystkiego co potrzebne przy programowaniu. Widzisz znaki diakrytyzowane, albowiem program ten kodowanie rozpoznaje i ustawia automatycznie. Sprawdź które ustawia dla tego pliku – otwórz plik w tym edytorze i w głównym menu rozwiń pozycję Encoding:

encoding.png

Górna część służy do ustawienia wyświetlania zawartości edytora, dolna zaś do jej konwersji.


Druga sprawa – w komponentach możesz widzieć krzaczki, jeśli korzystasz ze starego IDE, w którym VCL natywnie obsługuje ANSI. Jeśli tak jest to zawartość pliku tekstowego musisz przekonwertować na to kodowanie, bo dane w pliku mogą być w UTF-8.

1

Konsola pod Windows ma kodowanie 852, okienka mają 1250.
Być może do pliku zapisuje ci się w jednym, a otwierasz jako drugie.

Wątpię żeby miało to związek z Unicode, a tym bardziej z UTF-8 którego Windows nie używa.

0

Tylko jak zmusić żeby konsola otwierała się w odpowiednim kodowaniu.
I czy da się to zrobić w kodzie C++

0

Znalazłem polecenie zmiany kodowania chcp 1250 niestety nie działa.

0

Nie zmuszać. Poradzić sobie z tym faktem. Jeśli plik wynikowy jest w 852 to go przekonwertować albo załadować z odpowiednim kodowaniem - zależnie od tego co z nim dalej robisz.

0

Chciałem wyciągnąć pewne dane z systemu i zapisać je do pliku a następnie ten plik wyświetlić w polu Memo

   
    system("wmic computersystem  get name | findstr /v Name > C:\\hostname.txt | net share > C:\\share.txt");

	Form1->Memo_share->Lines->LoadFromFile("C:\\share.txt") ;
	TReplaceFlags rf2=TReplaceFlags()<<rfReplaceAll;
	Memo_share->Text=StringReplace(StringReplace(StringReplace(Memo_share->Text,"","",rf2),"\n","",rf2)," ","",rf2);

0

Spróbuj czegoś takiego:

std::wifstream ifs("C:\\share.txt");

ifs.imbue(std::locale(".OCP"));

std::wstring line;
std::wstring text;

while(std::getline(ifs, line)) { text += line; text += '\n'; }

Memo_share->Text = text.c_str();

1 użytkowników online, w tym zalogowanych: 0, gości: 1