Jak uzyskać polskie znaki w strum. wyjścia

0

Witam ponownie.
Czy da się uzyskać w C++, w windowsowej konsoli, polskie znaki w strumieniu wyjścia?
Jeśli tak to jak?

Pozdrawiam.

0

setlocale i wstringi albo CharToOemBuff

0

mój program chyba nie wspiera wide-stringów. Wywala błędy. Używam DEV-c++. Też próbowałem z nimi wcześniej.

0

Jeśli są błędy, to podaj ich treść. Jakiś kod też by się przydał.

0

Mingw (port gcc na Windows) nie obsługuje wstringów w ogóle. Ale można użyć wcharów.

#include "stdio.h"
#include "locale.h"

int main()
{
	setlocale(LC_ALL, "polish");
	
	wchar_t napis[] = L"Żółw";
	wprintf(L"%s\n", napis);
	
	return 0;
}
0

Nie nie obsługuje, tylko zapisz plik źródłowy w utf-8 z BOM-em, a locale daj takie: ".852". Powinno działać.

0

"illegal by sequense"

0

przykładu. a ten twój post też był dla mnie niezrozumiały.

0

A co tu niezrozumiałego jest?

0

.852? Jak je nadać, gdzie jest locale?

0
setlocale(LC_ALL, ".852");
0
0x666 napisał(a)
setlocale(LC_ALL, ".852");

Zdajesz sobie sprawę z tego, że to jest to samo co "polish"?

Masz kilka wyjść, żeby w mingw uzyskać polskie znaki na konsoli, w zależności od tego w jakim kodowaniu zapiszesz plik źródłowy:

codepage 852:

printf("%s", "Żółw");

ansi:

char napisAnsi[] = "Żółw";
char napisOem[5];
AnsiToOemBuff(napisAnsi, napisOem, 5); // tutaj następuje konwersja ansi -> oem (czyli codepage 852)
printf("%s", napisOem);

unicode:

setlocale(LC_ALL, "polish"); // mówimy, że chcemy, by wszystkie napisy były konwertowane do oem
wchar_t napis[] = L"Żółw";
wprintf(L"%s", napis); // tutaj następuje konwertowanie
0
Rev napisał(a)

Zdajesz sobie sprawę z tego, że to jest to samo co "polish"?

Oczywiście, że to nie jest to samo. Proponuję zajrzeć do opisu setlocale. Format jest taki: [język]_[kraj].[kodowanie]. Dając tylko polish określasz jedynie język, kodowanie może być domyślne. U mnie, na MinGW, Twoje locale nie działa, ponieważ przybiera kodowanie systemowe, czyli 1250.

0

jaki plik trzeba dołączyć do include w kodzie żeby AnsiOemBuff działał? teraz wyskakuje mi jako niezadeklarowany... próbowałem z: #include <string>

0

W takim razie chyba najlepiej będzie ustawić locale na Polish_Poland.OCP (samo .OCP też może być). .OCP zostanie automatycznie zamienione na aktualnie ustawione kodowanie OEM (a nie ANSI, jak faktycznie w przypadku podania samego języka).

Aczkolwiek, przy samym polish i kodowaniu ANSI (1250) i ustawionym kodowaniu OEM jako 852 również dostaję poprawnie wyświetlony napis.

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