Zapis polskich znaków do Stringa

0

Mam pytanie:
Czy do string'a można zapisać polskie znaki(ł ó ś ć ę ą ź ż itp)
U mnie albo polskich znaków nie wyświetla albo pokazuje krzaczki .
Zmieniłem już kodowanie w konsoli ale nie chce działać.

0

Poczytaj na temat kodowania.

0

Jaki system, jaki kompilator.

I co to znaczy "Zmieniłem już kodowanie w konsoli" - z jakiego na jakie?

0
  1. w czym edytujesz program - edytor, IDE, notatnik?

  2. pokaż fragment kodu o którym chcesz dyskutować

  3. jak zmieniłeś kodowanie w konsoli

  4. najlepiej załącz kod (jego najistotniejszy fragment oczywiście) w postaci załącznika, można będzie posprawdzać bez przekłamań

0

Więc tak:

  • IDE to Code::Blocks
  • Fragment kodu o którym chce dyskutować.
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
string tekst = "ąśćę";
//cin  >> tekst;
cout << tekst<<endl<<endl;
system("pause");
return 0;
}
  • Kodowanie konsoli zmieniłem tym poleceniem

chcp 1250

  • OS : Windows 7
  • Kompilator g++
    I jeszcze komentarz do kodu :
    Gdy deklaruję string'a w ten sposób:
string tekst = "ąśćę"; 

wychodzą krzaczki
ale gdy w ten sposób:

string tekst ; 

a tekst do string'a podaje w konsoli wszystko działa dobrze.(patrz komentarz)

0

A nie wystarczy po prostu taka sztuczka?

setlocale(LC_ALL, "Polish");
0

Sprawdź pod edytorem hexa (np. xvi32) czy znaczki w kodzie źródłowym odpowiadają stronie Windows 1250:

http://pl.wikipedia.org/wiki/Windows-1250

xvi32: http://www.chmaas.handshake.de/

0

Rozwiązanie 100% skuteczne, ale nie zawsze łatwe w wykonaniu: zapisać plik źródłowy w kodowaniu CP852. Już bez dodatkowego kombinowania ani w kodzie źródłowym, ani żadnym chcp.

Pytanie teraz tylko, czy Code::Blocks pozwoli ci zapisać plik jako 852.

0

Coś szukam na ten temat ale ie wiem czy to pomoże zapisac polski znak do zmiennej typu string :(
Ciagle próbuję coś z kodem ale zamiast polskich znaków wyświetla krzaczki albo puste pole.

0

Zamiast std::string użyj std::wstring

http://stackoverflow.com/questions/4246674/polish-chars-in-stdstring

EDIT: Podobno nie działa pod Linuxem.

0
kacper546 napisał(a):

Coś szukam na ten temat ale ie wiem czy to pomoże zapisac polski znak do zmiennej typu string :(
Ciagle próbuję coś z kodem ale zamiast polskich znaków wyświetla krzaczki albo puste pole.

Ten wątek widziałeś?

http://4programmers.net/Forum/C_i_C++/113148-C++_Polskie_znaki

0

czy taki program u ciebie prawidłowo działa?

#include <stdio.h>
#include <locale.h>

int main()
{
	setlocale(LC_CTYPE, ".1250");
	printf("zażółć gęślą jaźń\n");
}

(celowo w C żeby wyeliminować możliwe przyczyny problemu...)

EDIT: a taki?

#include <string>
#include <iostream>
#include <clocale>

int main()
{
	std::setlocale(LC_CTYPE, ".1250");
	std::string str = "zażółć gęślą jaźń";
	std::cout << str << std::endl;
}
0

I program:
Niestety nie działa gdyż konsola zwraca śmieci

zaĹĽĂłĹ'Ä┼ gÄtĹ>lÄ jaĹşĹ"

II program:
To samo - również zwraca śmieci :

zaĹĽĂłĹ'Ä┼ gÄtĹ>lÄ jaĹşĹ"

0

A moje pytanie brzmi czemu nie działa taki oto kod:

 
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int i = 0;
string tekst = "ż";
cin  >> tekst;
if (tekst[i] == 'ż' )cout << "ż\n\n\n";
system("pause");
return 0;
}
Free Image Hosting pictures upload

Jeśli działał by prawidłowo to powinienem ujrzeć kolejne

ż

0

Nie działa, bo to co wprowadzasz ma inny kod niż to co masz w kodzie.

Przetestuj taki kod:

#include <iostream>
using namespace std;
 
void wyswietlLancuch(const string &str)
{
  cout << str << dec << "( " << str.length() << " )" << endl; 
  for(string::const_iterator it = str.begin(), epos = str.end(); it != epos; ++it) {    
    cout << hex << (static_cast<int>(*it) & 0xff);
    cout << ", ";
  }
}
 
int main() 
{
  string tekst = "ĄĆŻŹąćżź";
  cout << "Tekst z kodu: ";
  wyswietlLancuch(tekst);
  cout << endl;
  cin  >> tekst;
  if (!tekst.empty())
  {
    cout << "Tekst wprowadzony: ";
    wyswietlLancuch(tekst);
    cout << endl;      
  }
}

http://ideone.com/DDdPUc

I porównaj z tym:
http://en.wikipedia.org/wiki/Polish_code_pages

U mnie na Windows 7 wychodzi "IBM 852".

0

Czy powinno być coś takiego ??
Free Image Hosting pictures upload

0

@kacper546: najwyraźniej nie stosujesz się dokładnie do poleceń. w tym wątku jest zawarta wystarczająca informacja, by zaczęło ci działać.

0
Free Image Hosting pictures upload

To mi wychodzi coś takiego gdy pisze polskie znaki

ĄĘŚĆŁÓ

0

O to co wyszło:
Free Image Hosting pictures upload
A tu kod:

 #include <iostream>
using namespace std;

void wyswietlLancuch(const string &str)
{
  cout << str << dec << "( " << str.length() << " )" << endl;
  for(string::const_iterator it = str.begin(), epos = str.end(); it != epos; ++it) {
    cout << hex << (static_cast<int>(*it) & 0xff);
    cout << ", ";
  }
}

int main()
{
setlocale(LC_CTYPE,".1250");
  string tekst = "ĄĘŚĆŁÓ";
  cout << "Tekst z kodu: ";
  wyswietlLancuch(tekst);
  cout << endl;
  cin  >> tekst;
  if (!tekst.empty())
  {
    cout << "Tekst wprowadzony: ";
    wyswietlLancuch(tekst);
    cout << endl;
  }
}
0

Tekst wprowadzony sugeruje IBM 852 - tak jak u mnie. Celuj w tę stronę (kodową).
Tekst z kodu to jakiś miks - nie wiem dlaczego nie zgadza się z żadną stroną.
Może przez setlocale.

0

@kacper546: nie mam Code::Blocks, ale znajdź tam gdzieś opcję pozwalającą na ustawienie kodowania pliku .cpp.
Gdzieś w opcjach zapisu, albo we właściwościach dokumentu...

Bez tego nie ruszysz.

0

Jest postęp teraz wyświetla polskie znaki jeśli są wprowadzone do string'a podczas kompilacji ale te same znaki wpisane podczas działania programu dają krzaczki.
Free Image Hosting pictures upload

0

Może to niezbyt odkrywcze ale okazuje się że tekst wprowadzony podczas kompilacji kodowany jest w Windows-1250 a tekst wprowadzany podczas działania programu to IBM 852

0

Napisz jak Ci się wreszcie uda znaleźć rozwiązanie - co zrobiłeś.

0

Wystarczy dać dwie rzeczy:

  1. SetConsoleOutputCP - http://msdn.microsoft.com/pl-pl/library/windows/desktop/ms686036%28v=vs.85%29.aspx
  2. SetConsoleCP - http://msdn.microsoft.com/pl-pl/library/windows/desktop/ms686013%28v=vs.85%29.aspx
    i wszystko gra ... locale można nie ustawiać.

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