Íslenskir stafir í C++

Skjámynd

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

Íslenskir stafir í C++

Pósturaf SuprDewd » Fös 13. Jan 2012 22:42

É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: 12
Skráði sig: Þri 10. Nóv 2009 21:12
Reputation: 4
Staða: Ótengdur

Re: Íslenskir stafir í C++

Pósturaf SuprDewd » Fös 13. Jan 2012 22:53

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
Reputation: 12
Staðsetning: ::1
Staða: Ótengdur

Re: Íslenskir stafir í C++

Pósturaf gardar » Fös 13. Jan 2012 23:06

Ertu ekki bara að nota vitlaust charset?

Skipta yfir í utf-8



Skjámynd

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

Re: Íslenskir stafir í C++

Pósturaf SuprDewd » Fös 13. Jan 2012 23:17

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: 3606
Skráði sig: Fim 12. Feb 2009 10:46
Reputation: 142
Staða: Ótengdur

Re: Íslenskir stafir í C++

Pósturaf dori » Fös 13. Jan 2012 23:45

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: 3759
Skráði sig: Fim 31. Júl 2003 15:25
Reputation: 123
Staðsetning: Reykjavík
Staða: Tengdur

Re: Íslenskir stafir í C++

Pósturaf Pandemic » Fös 13. Jan 2012 23:53

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: 3606
Skráði sig: Fim 12. Feb 2009 10:46
Reputation: 142
Staða: Ótengdur

Re: Íslenskir stafir í C++

Pósturaf dori » Fös 13. Jan 2012 23:57

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



Skjámynd

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

Re: Íslenskir stafir í C++

Pósturaf intenz » Lau 14. Jan 2012 11:52

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

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: 12
Skráði sig: Þri 10. Nóv 2009 21:12
Reputation: 4
Staða: Ótengdur

Re: Íslenskir stafir í C++

Pósturaf SuprDewd » Lau 14. Jan 2012 13:37

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: 12
Skráði sig: Þri 10. Nóv 2009 21:12
Reputation: 4
Staða: Ótengdur

Re: Íslenskir stafir í C++

Pósturaf SuprDewd » Lau 14. Jan 2012 13:48

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

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: 3606
Skráði sig: Fim 12. Feb 2009 10:46
Reputation: 142
Staða: Ótengdur

Re: Íslenskir stafir í C++

Pósturaf dori » Sun 15. Jan 2012 01:29

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

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
Reputation: 35
Staðsetning: /dev/null
Staða: Ótengdur

Re: Íslenskir stafir í C++

Pósturaf intenz » Sun 15. Jan 2012 02:32

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