Íslenskir stafir í C++

Svara
Skjámynd

Höfundur
SuprDewd
Nýliði
Póstar: 11
Skráði sig: Þri 10. Nóv 2009 21:12
Staða: Ótengdur

Íslenskir stafir í C++

Póstur af SuprDewd »

Ég er búinn að vera í svakalegu veseni varðandi íslenska stafi í C++.
Ég er á Windows 7 x64.

Kóði: Velja allt

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string a = "Halló sæti köttuðþ", b;
	getline(cin, b);

	cout << a << endl;
	cout << b << endl;
	cout << (a == b) << endl;

	return 0;
}
Ég er búinn að compilea þetta forrit með MinGW gcc/g++ (v. 4.6.1) og með Microsoft VC++ bæði sjálfur með "Microsoft Visual Studio 10.0\VC\bin\cl.exe" og í gegnum Visual Studio sjálft, og svo í öllum tilvikum er ég búinn að prufa mismunandi encoding og character set á .cpp skránni.

Ég keyri forritið og skrifa inn "Halló sæti köttuðþ".
Outputtið sem maður býst við að sjá er:

Kóði: Velja allt

Halló sæti köttuðþ
Halló sæti köttuðþ
1
En í staðinn er seinni strengurinn í rugli, og a == b returnar false:

Kóði: Velja allt

Halló sæti köttuðþ
Hall├│ s├ªti k├Âttu├░├¥       <--- Þetta kemur mismunandi eftir encoding/character set á .cpp skránni.
0
Svo prufaði ég líka eitt í viðbót. Keyrði eftirfarandi áður en ég skrifaði eitthvað út:

Kóði: Velja allt

locale::global(locale(""));
Útkoman var óbreytt allstaðar nema þegar ég gerði þetta í Visual Studio, en þá kom a réttur út, en b var ruglaður (eins og a var).

Ég er búinn að vera með þennan hausverk í nokkrar vikur (hef aldrei pælt neitt mikið í þessu, en núna þyrfti ég að fá þetta í lag), og hef ekki fundið neina lausn sem virkar fyrir mig á netinu.

Eruð þið með hugmyndir um hvað sé að?
Og líka ef einhver á ekki í þessu vandamáli að stríða og er á Windows 7, endilega segja mér frá hvaða compiler/encoding á skrá (ef eitthver sérstök er notuð) þið eruð að nota.

Fyrirfram þakkir,
Bjarki Ágúst.
Skjámynd

Höfundur
SuprDewd
Nýliði
Póstar: 11
Skráði sig: Þri 10. Nóv 2009 21:12
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af SuprDewd »

Bara að sýna að þetta virki:
http://ideone.com/4GEJG
Skjámynd

gardar
Besserwisser
Póstar: 3111
Skráði sig: Mán 11. Ágú 2008 02:49
Staðsetning: ::1
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af gardar »

Ertu ekki bara að nota vitlaust charset?

Skipta yfir í utf-8
Skjámynd

Höfundur
SuprDewd
Nýliði
Póstar: 11
Skráði sig: Þri 10. Nóv 2009 21:12
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af SuprDewd »

gardar skrifaði:Ertu ekki bara að nota vitlaust charset?

Skipta yfir í utf-8
Ég er búinn að prufa UTF-8 og alla aðra möguleika undir Encoding og Encoding/Character Sets í Notepad++.
Ekkert af því virkar, en útkomurnar eru samt mismunandi.
Skjámynd

dori
Besserwisser
Póstar: 3567
Skráði sig: Fim 12. Feb 2009 10:46
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af dori »

Hvaða charset notar terminalinn í Windows eða hvað það er sem keyrir forritið? Þarftu ekki bara að gera eitthvað "decode" á gögnin sem þú lest inn? Ég hef annars lítið notað C++ þannig að ég myndi ekki vita alveg en þetta er það sem mér dettur helst í hug.

Kemur textinn sem þú skilgreinir í kóðanum alltaf rétt út? Það myndi renna stoðum undir grun minn.
Skjámynd

Pandemic
Stjórnandi
Póstar: 3737
Skráði sig: Fim 31. Júl 2003 15:25
Staðsetning: Reykjavík
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af Pandemic »

Held að þetta sé ekkert auðvelt eins og að stilla eitthvað. Þú verður líklega að fá library sem getur notað unicoding.
Skjámynd

dori
Besserwisser
Póstar: 3567
Skráði sig: Fim 12. Feb 2009 10:46
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af dori »

Pandemic skrifaði:Held að þetta sé ekkert auðvelt eins og að stilla eitthvað. Þú verður líklega að fá library sem getur notað unicoding.
Nákvæmlega, c++ er nátturulega low level þannig að þú þarft/færð (eftir því hvernig þú lítur á það) að stjórna öllu sjálfur.

Skoðaði smá og einhverjir benda á ICU. En það er náttúrulega kannski bloated og væri góð æfing að gera þetta alveg sjálfur (ef þetta er ekki eitthvað mjög mikilvægt s.s.)

http://stackoverflow.com/questions/2424 ... tring-on-c" onclick="window.open(this.href);return false;
Skjámynd

intenz
Besserwisser
Póstar: 3337
Skráði sig: Mið 08. Okt 2008 22:07
Staðsetning: /dev/null
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af intenz »

dori skrifaði:
Pandemic skrifaði:Held að þetta sé ekkert auðvelt eins og að stilla eitthvað. Þú verður líklega að fá library sem getur notað unicoding.
Nákvæmlega, c++ er nátturulega low level þannig að þú þarft/færð (eftir því hvernig þú lítur á það) að stjórna öllu sjálfur.

Skoðaði smá og einhverjir benda á ICU. En það er náttúrulega kannski bloated og væri góð æfing að gera þetta alveg sjálfur (ef þetta er ekki eitthvað mjög mikilvægt s.s.)

http://stackoverflow.com/questions/2424 ... tring-on-c" onclick="window.open(this.href);return false;
C++ er ekki beint low level. Það er intermediate-level mál, þar sem þú getur bæði skrifað assembly kóða í því ásamt high-level kóða eins og klasa, föll, o.s.frv.

En hvað um það. OP:

Þú getur sett þessa línu efst:

Kóði: Velja allt

#include "windows.h"
Og svo þessa línu inni í main:

Kóði: Velja allt

SetConsoleOutputCP(1252);
i7 920 @ 2.8 GHz | Gigabyte EX58-UD3R | CSX 3x2 GB DDR3 @ 1600 MHz | Gigabyte ATi Radeon HD 5850 | Sileo 500 | RealPower 600W | Corsair Force 3 120 GB | 27" FullHD | W7 x64
Skjámynd

Höfundur
SuprDewd
Nýliði
Póstar: 11
Skráði sig: Þri 10. Nóv 2009 21:12
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af SuprDewd »

dori skrifaði:Hvaða charset notar terminalinn í Windows eða hvað það er sem keyrir forritið? Þarftu ekki bara að gera eitthvað "decode" á gögnin sem þú lest inn? Ég hef annars lítið notað C++ þannig að ég myndi ekki vita alveg en þetta er það sem mér dettur helst í hug.

Kemur textinn sem þú skilgreinir í kóðanum alltaf rétt út? Það myndi renna stoðum undir grun minn.
Gögnin sem eru skrifuð inn í terminalinn skrifast alltaf rétt út, það er strengurinn sem er skilgreindur í kóðanum sem kemur vitlaus út.
Skjámynd

Höfundur
SuprDewd
Nýliði
Póstar: 11
Skráði sig: Þri 10. Nóv 2009 21:12
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af SuprDewd »

intenz skrifaði:
dori skrifaði:
Pandemic skrifaði:Held að þetta sé ekkert auðvelt eins og að stilla eitthvað. Þú verður líklega að fá library sem getur notað unicoding.
Nákvæmlega, c++ er nátturulega low level þannig að þú þarft/færð (eftir því hvernig þú lítur á það) að stjórna öllu sjálfur.

Skoðaði smá og einhverjir benda á ICU. En það er náttúrulega kannski bloated og væri góð æfing að gera þetta alveg sjálfur (ef þetta er ekki eitthvað mjög mikilvægt s.s.)

http://stackoverflow.com/questions/2424 ... tring-on-c" onclick="window.open(this.href);return false;
C++ er ekki beint low level. Það er intermediate-level mál, þar sem þú getur bæði skrifað assembly kóða í því ásamt high-level kóða eins og klasa, föll, o.s.frv.

En hvað um það. OP:

Þú getur sett þessa línu efst:

Kóði: Velja allt

#include "windows.h"
Og svo þessa línu inni í main:

Kóði: Velja allt

SetConsoleOutputCP(1252);
Ég prufaði þetta en núna var fyrri línan alveg eins og seinni línan líka orðin rugluð. Ég ætla að prufa önnur codepage heldur en 1252. Takk samt.
Skjámynd

dori
Besserwisser
Póstar: 3567
Skráði sig: Fim 12. Feb 2009 10:46
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af dori »

SuprDewd skrifaði:
intenz skrifaði:
dori skrifaði:
Pandemic skrifaði:Held að þetta sé ekkert auðvelt eins og að stilla eitthvað. Þú verður líklega að fá library sem getur notað unicoding.
Nákvæmlega, c++ er nátturulega low level þannig að þú þarft/færð (eftir því hvernig þú lítur á það) að stjórna öllu sjálfur.

Skoðaði smá og einhverjir benda á ICU. En það er náttúrulega kannski bloated og væri góð æfing að gera þetta alveg sjálfur (ef þetta er ekki eitthvað mjög mikilvægt s.s.)

http://stackoverflow.com/questions/2424 ... tring-on-c" onclick="window.open(this.href);return false;
C++ er ekki beint low level. Það er intermediate-level mál, þar sem þú getur bæði skrifað assembly kóða í því ásamt high-level kóða eins og klasa, föll, o.s.frv.

En hvað um það. OP:

Þú getur sett þessa línu efst:

Kóði: Velja allt

#include "windows.h"
Og svo þessa línu inni í main:

Kóði: Velja allt

SetConsoleOutputCP(1252);
Ég prufaði þetta en núna var fyrri línan alveg eins og seinni línan líka orðin rugluð. Ég ætla að prufa önnur codepage heldur en 1252. Takk samt.
Er til eitthvað "set input codepage" í þessu windows.h?
Skjámynd

intenz
Besserwisser
Póstar: 3337
Skráði sig: Mið 08. Okt 2008 22:07
Staðsetning: /dev/null
Staða: Ótengdur

Re: Íslenskir stafir í C++

Póstur af intenz »

dori skrifaði:Er til eitthvað "set input codepage" í þessu windows.h?
Held það sé bara SetConsoleCP()
i7 920 @ 2.8 GHz | Gigabyte EX58-UD3R | CSX 3x2 GB DDR3 @ 1600 MHz | Gigabyte ATi Radeon HD 5850 | Sileo 500 | RealPower 600W | Corsair Force 3 120 GB | 27" FullHD | W7 x64
Svara