Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [C++] wchar_t en wstring datatypes werken niet  (gelezen 1654 keer)

Offline Joshua822

  • Lid
[C++] wchar_t en wstring datatypes werken niet
« Gepost op: 2010/02/08, 17:25:49 »
Hallo allemaal.

Ik heb onlangs het boek Practical C++ programming gekocht.

In dit boek staat iets interessant : namelijk een beschrijving van de wchar_t en wstring datatypes. Dit zou simpel gezegd voor een simpele terminalapplicatie unicode karakters en strings met unicode karakters beschikbaar maken.

Het werkt echter niet.

Het eerste voorbeeld is heel simpel: het op het scherm printen van een whcar_t karakter:
...
wchar_t karakter ( 'é' );
std::cout << karakter << '\n';
...

Dit werkt echter niet. In plaats van het karakter 'é' krijg ik een getal te zien.

En het datatype wstring werkt al helemaal niet, neem nu het volgende voorbeeld:
...
#include <string>
...
wstring tekenreeks ( "élève" );
std::cout << tekenreeks << '\n';
...

Dit compileert niet. G++ klaagt erover dat het datatype wstring niet gedefiniëerd zou zijn. En dat zorgt er uiteraard voor dat de volgende lijn ook niet gecompileerd kan worden omdat de variabel tekenreeks niet gedefiniëerd is.

Weet iemand hoe ik het wel moet doen ? Alvast bedankt!

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: [C++] wchar_t en wstring datatypes werken niet
« Reactie #1 Gepost op: 2010/02/08, 17:57:15 »
Hey, Ik googlede ff en kwam op deze site: http://icu-project.org/docs/papers/unicode_wchar_t.html

Daar zeggen ze: "wchar_t is compiler-dependent and therefore not very portable. Using it for Unicode binds a program to the character model of a compiler. Instead, it is often better to define and use dedicated data types."

Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Re: [C++] wchar_t en wstring datatypes werken niet
« Reactie #2 Gepost op: 2010/02/09, 08:14:41 »
wchar_t karakter = L'é';
std::wcout << karakter;
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
Re: [C++] wchar_t en wstring datatypes werken niet
« Reactie #3 Gepost op: 2010/02/09, 21:39:49 »
Bedankt voor de tips, maar zo werkt het ook niet. Ik heb geprobeerd het volgende programma te compileren en uit te voeren, maar helaas, het werkt niet :
#include <iostream>
#include <string>

int main ( )
{
    wstring tekenreeks ( L"élève" );
    std::wcout << tekenreeks << '\n';
    return 0;
}

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: [C++] wchar_t en wstring datatypes werken niet
« Reactie #4 Gepost op: 2010/02/09, 21:46:40 »
Ik ben niet zo erg into C. Maar die ene site zei dat het compiler afhankelijk is. Ik gok dat JOUW compiler het niet ondersteunt. Misschien kun je ff kijken welke compiler wordt aangeraden door je boek?
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Re: [C++] wchar_t en wstring datatypes werken niet
« Reactie #5 Gepost op: 2010/02/10, 13:02:38 »
Bedankt voor de tips, maar zo werkt het ook niet. Ik heb geprobeerd het volgende programma te compileren en uit te voeren, maar helaas, het werkt niet :
#include <iostream>
#include <string>

int main ( )
{
    wstring tekenreeks ( L"élève" );
    std::wcout << tekenreeks << '\n';
    return 0;
}
std::wstring

Of je doet het op de eenvoudige manier...
#define S_APPNAME "Test"
#define S_APPTYPE S_APPTYPE_FHS
#include <Sylph.h>
#include <iostream>

int SylphMain(Array<String> args) {
    String s = "élève";
    std::cout << s << std::endl;
    return 0;
}

Vereist g++ >= 4.4.0 en LibSylph >= 0.1alpha3
« Laatst bewerkt op: 2010/02/10, 14:34:12 door SeySayux »
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
Re: [C++] wchar_t en wstring datatypes werken niet
« Reactie #6 Gepost op: 2010/02/10, 17:40:23 »
Oke, het volgende programma werkt:
#include <iostream>
#include <string>

int main ( )
{
    std::wstring tekenreeks ( L"élève" );
    std::wcout << tekenreeks << '\n';
    return 0;
}

Het compileert, en het programma werkt min of meer. Maar er is een probleem: de tekens 'é' en 'è' worden vervangen door een vraagteken.

Re: [C++] wchar_t en wstring datatypes werken niet
« Reactie #7 Gepost op: 2010/02/10, 19:22:27 »
Oke, het volgende programma werkt:
#include <iostream>
#include <string>

int main ( )
{
    std::wstring tekenreeks ( L"élève" );
    std::wcout << tekenreeks << '\n';
    return 0;
}

Het compileert, en het programma werkt min of meer. Maar er is een probleem: de tekens 'é' en 'è' worden vervangen door een vraagteken.

Waarschijnlijk staat je terminal in utf8 in plaats van utf16. Oplossing is vrij eenvoudig:

#include <iostream>
#include <string>

int main() {
    const char* tekenreeks = "élève";
    std::cout << tekenreeks << std::endl;
    return 0;
}

Of, als je liever een klasse als string hebt,

#define S_APPNAME "Test"
#define S_APPTYPE S_APPTYPE_FHS
#include <Sylph.h>
#include <iostream>

int SylphMain(Array<String> args) {
    String s = "élève";
    std::cout << s << std::endl;
    return 0;
}

Met andere woorden: Ik weet niet voor wat wchar_t en wstring er in zitten... Bijna iedereen gebruikt UTF-8...
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
Re: [C++] wchar_t en wstring datatypes werken niet
« Reactie #8 Gepost op: 2010/02/10, 19:27:24 »
Ah, het probleem ligt dus aan mijn terminalvenster. Ik gebruik gewoon gnome-terminal in Ubuntu 10.04 Lucid Lynx Alpha 2.