Síða 1 af 1

Íslenskir stafir í C++

Sent: Fös 13. Jan 2012 22:42
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.

Re: Íslenskir stafir í C++

Sent: Fös 13. Jan 2012 22:53
af SuprDewd
Bara að sýna að þetta virki:
http://ideone.com/4GEJG

Re: Íslenskir stafir í C++

Sent: Fös 13. Jan 2012 23:06
af gardar
Ertu ekki bara að nota vitlaust charset?

Skipta yfir í utf-8

Re: Íslenskir stafir í C++

Sent: Fös 13. Jan 2012 23:17
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.

Re: Íslenskir stafir í C++

Sent: Fös 13. Jan 2012 23:45
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.

Re: Íslenskir stafir í C++

Sent: Fös 13. Jan 2012 23:53
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.

Re: Íslenskir stafir í C++

Sent: Fös 13. Jan 2012 23:57
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;

Re: Íslenskir stafir í C++

Sent: Lau 14. Jan 2012 11:52
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);

Re: Íslenskir stafir í C++

Sent: Lau 14. Jan 2012 13:37
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.

Re: Íslenskir stafir í C++

Sent: Lau 14. Jan 2012 13:48
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.

Re: Íslenskir stafir í C++

Sent: Sun 15. Jan 2012 01:29
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?

Re: Íslenskir stafir í C++

Sent: Sun 15. Jan 2012 02:32
af intenz
dori skrifaði:Er til eitthvað "set input codepage" í þessu windows.h?
Held það sé bara SetConsoleCP()