Toon posts:

[c++] è weergeven

Pagina: 1
Acties:
  • 203 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
C++:
1
2
cout << "Die is goed hè: " << voornaam << " " << achternaam <<endl;
cout << endl;


Niet de gehele code uiteraard ;)

Het is een console-applicatie, empty file. Het gaat om de è

Deze wordt op de console weergegeven als een Þ

Hoe krijg ik het voor elkaar dat deze wel als een normale è wordt weergegeven?

[ Voor 2% gewijzigd door een moderator op 08-02-2007 16:07 . Reden: even de code=c++ tag erin gezet ;) ]


Acties:
  • 0 Henk 'm!

Verwijderd

console heeft alleen ascii, en geen extended ascii ;)
edit:

argh, gaat zichzelf slaan :P

[ Voor 36% gewijzigd door Verwijderd op 08-02-2007 16:39 ]


Acties:
  • 0 Henk 'm!

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Verwijderd schreef op donderdag 08 februari 2007 @ 16:06:
console heeft alleen ascii, en geen extended ascii ;)
Sinds wanneer :?

C++:
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;

int main()
{
    cout << "Die is goed hè: " <<endl;
    return 0;
}

werkt hier anders prima onder Linux en ik zie niet waarom dat onder win32 anders zou moeten werken? :)

God, root, what is difference? | Talga Vassternich | IBM zuigt


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een console heeft weldegelijk extended ascii, alleen is de codepage van je C++ IDE en de console waarschijnlijk niet hetzelfde. Extended ascii zegt ook geen zak, behalve dat er 8 bits characters ondersteund worden. Wat de tekens boven de 127 voorstellen is niet gedefinieerd.

Het gaat denk ik wel goed als je unicode strings gebruikt (dus std::wcout << L"Die is goed hè")
[.edit: hmm nee bij mij werkt dit niet. Blijkbaar snapt de console geen unicode :) ]

En waarom zet je C++ code in hemelsnaam tussen php tags :?

[ Voor 32% gewijzigd door .oisyn op 08-02-2007 16:27 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

- ik doelde op windows
- en voor de rest:

ik voel me slecht :'(

edit: @oisyn: ja daarom had ik het ook weer weggehaald O-)

[ Voor 255% gewijzigd door Verwijderd op 08-02-2007 16:17 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

moto-moi schreef op donderdag 08 februari 2007 @ 16:08:
[...]

Sinds wanneer :?

C++:
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;

int main()
{
    cout << "Die is goed hè: " <<endl;
    return 0;
}

werkt hier anders prima onder Linux en ik zie niet waarom dat onder win32 anders zou moeten werken? :)
Werkt in windows ook als je met copy con of een console editor oid die code in je sourcefile zet. Het gaat erom dat de app waarmee de sourcefile gemaakt is een andere codepage hanteert dan de console zelf. Dat geldt voor linux net zo goed :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op donderdag 08 februari 2007 @ 16:09:
- ik had deels gelijk, standaard gezien heeft de windows console geen extended ascii, dit moet je forceren idd O+
Nogmaals, "extended ascii" zegt niets anders dan dat er 8 bits tekens ondersteunt worden, en dat is ook het geval. Ascii definieert de betekenis van de eerste 128 tekens, maar extended ascii niet die van de bovenste 128. Wat je zegt slaat dus nergens op :)

http://en.wikipedia.org/wiki/Extended_ascii

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm...heb de code van è opgezocht, E8.

dus de regel als volgt veranderd:

C++:
1
cout << "Die is goed h\xE8: ";


maar nu krijg ik weer dezelfde rare p

Ik gebruik Visual Studio .net 2003, ingebouwde compiler en windows xp + sp2 als OS, en ik test op hetzelfde systeem.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
C++:
1
cout << "Die is goed h\x8A: ";


Werkt wel :) Verkeerde extended ascii tabel gebruikt.

Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 09:22

voodooless

Sound is no voodoo!

Probeer eens 0x82 ?

Never mind, ik heb zitten suffen, en jij hebt het al gevonden ;)

Je moet gewoon deze hebben:

Afbeeldingslocatie: http://jimprice.com/ascii-128-255.gif

[ Voor 96% gewijzigd door voodooless op 08-02-2007 16:41 ]

Do diamonds shine on the dark side of the moon :?


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

Er is geen vaste code van è in ascii. Wat jij hebt opgezocht is de è in de ISO-8859-1 code page (en unicode aangezien de eerste 256 chars van unicode gelijk zijn aan ISO-8859-1). Maar de console gebruikt niet die codepage, dus dat heeft geen nut. En dan kun je het wel wijzigen zodat je wél de goede output krijgt, maar dan ziet het er evenwel niet uit bij iemand die weer een andere codepage op z'n console heeft zitten.

De unicode versie van WriteConsole() doet het overigens wel goed.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Met:
C++:
1
cout << GetConsoleCP();
kun je de huidige code page opvragen.

Overzicht (OEM) code pages
maar nu krijg ik weer dezelfde rare p
Da's geen ‘p’ maar een ‘thorn’; werd gebruikt in Scandinavië en Oud-Engels.

[ Voor 36% gewijzigd door Icelus op 08-02-2007 16:45 ]

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

.oisyn schreef op donderdag 08 februari 2007 @ 16:14:
Werkt in windows ook als je met copy con of een console editor oid die code in je sourcefile zet. Het gaat erom dat de app waarmee de sourcefile gemaakt is een andere codepage hanteert dan de console zelf. Dat geldt voor linux net zo goed :)
Weet ik, maar ik doelde dan ook op de opmerking van Lupare, ik had geen Windows bij de hand om te kijken wat daar precies het resultaat zou zijn m.b.t. codepages zoals jij al gezegd hebt :)

God, root, what is difference? | Talga Vassternich | IBM zuigt


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
.oisyn schreef op donderdag 08 februari 2007 @ 16:40:
De unicode versie van WriteConsole() doet het overigens wel goed.
Kun je mij een voorbeeldje geven dan? Ben net deze week begonnen met C++, en ik gok dat dit buiten het bestek van de opdracht valt, maar wilde graag weten hoe het moet :)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

't is geen C++, 't zit in de win32 API :). Je zou evt. een unicode wstreambuf kunnen implementeren die van WriteConsole gebruik maakt (ik gok dat de standaard implementatie van de streambuf van std::wcout gewoon WriteFile() doet, en dan is er idd geen unicode support voor de console). Maar als je net begonnen bent met C++ is dat wellicht nog even te ingewikkeld ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

Icelus schreef op donderdag 08 februari 2007 @ 16:42:
Met:
C++:
1
cout << GetConsoleCP();
kun je de huidige code page opvragen.

Overzicht (OEM) code pages
Uiteraard gaat het natuurlijk om de output codepage (dus Get/SetConsoleOutputCP()), maar dit lijkt niet te werken. Als ik 'm instel op 28591 (ISO-8859-1) dan geeft hij alsnog een thom. Het frappante is dat WriteConsole dan ook niet meer goed gaat (die geeft eveneens een thom) 8)7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt onder windows XP (waarschijnlijk ook onder de oudere NT-smaken) CHCP gebruiken. Zonder parameters laat 'ie de huidige codepage van je console proces zien. Kijk eens wat voor codepage je texteditor gebruikt, waarschijnlijk komt die niet overeen met die van je console, en dan komt idd die letter niet goed tevoorschijn.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
moto-moi schreef op donderdag 08 februari 2007 @ 16:08:
[...]

C++:
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;

int main()
{
    cout << "Die is goed hè: " <<endl;
    return 0;
}

werkt hier anders prima onder Linux en ik zie niet waarom dat onder win32 anders zou moeten werken? :)
Omdat 't niet netjes is? Wel netjes is:
C++:
1
2
3
4
5
6
#include <iostream>

int main()
{
    std::wcout << L"Die is goed hè: " << std::endl;
}

wchar_t is Unicode onder Windows (en elk ander relevant systeem), en Unicode heeft gewoon een è. Dit doet het dus ook in China of Oost Europa, onafhankelijk van codepages en dergelijk gedonder. De enige mogelijke restrictie is dat je natuurlijk wel een Unicode font moet hebben (Lucida Console is behoorlijk uitgebreid) en een beetje modernegoede compiler.

edit:
Hmm, VS2005 heeft toch iets hulp nodig, zoals .oisyn terecht opmerkte. Hoe ze op het idee komen om WriteConsoleA te gebruiken ... 8)7 maar da's zo gefixt met een goede streambuf.

[ Voor 9% gewijzigd door MSalters op 08-02-2007 23:18 ]

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

MSalters schreef op donderdag 08 februari 2007 @ 23:02:
edit:
Hmm, VS2005 heeft toch iets hulp nodig, zoals .oisyn terecht opmerkte. Hoe ze op het idee komen om WriteConsoleA te gebruiken ... 8)7 maar da's zo gefixt met een goede streambuf.
Is 't idd WriteConsole? Ik had geen zin om er doorheen te tracen, maar ik las dat console IO via Read/WriteFile dus geen unicode ondersteunt - dat wordt doodleuk omgezet naar extended ascii. Dus wellicht dat het gewoon door de unicode versie van WriteFile heen gaat, waarna alles verloren gaat. Dat lijkt me ook waarschijnlijk aangezien het volgens mij gewoon layered op stdout wat effectief gewoon een file handle is. Anders is het lastig redirecten.

[ Voor 3% gewijzigd door .oisyn op 08-02-2007 23:28 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

MSalters schreef op donderdag 08 februari 2007 @ 23:02:
Omdat 't niet netjes is? Wel netjes is:
C++:
1
2
3
4
5
6
#include <iostream>

int main()
{
    std::wcout << L"Die is goed hè: " << std::endl;
}

wchar_t is Unicode onder Windows (en elk ander relevant systeem), en Unicode heeft gewoon een è. Dit doet het dus ook in China of Oost Europa, onafhankelijk van codepages en dergelijk gedonder. De enige mogelijke restrictie is dat je natuurlijk wel een Unicode font moet hebben (Lucida Console is behoorlijk uitgebreid) en een beetje modernegoede compiler.
Blijkbaar heb jij het (ook) niet helemaal goed :P , in ieder geval niet volgens de laatste gcc versie ( gcc version 4.1.2 20061215 (prerelease) )
test.cpp: In function 'int main()':
test.cpp:5: error: converting to execution character set: Invalid or incomplete multibyte or wide character

God, root, what is difference? | Talga Vassternich | IBM zuigt


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, jouw editor heeft het niet goed :Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1