Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Konsolenausgabe mit Unicode

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.08.2006, 18:01 Uhr
~Hubert
Gast


Ja...wie im titel zu lesen, hab ich ein unicodeproblem.

ich möchte mir einfach die beschreibung meines Adapters ausgeben lassen, arbeite also mit direct3d. wenn ich mir die beschreibung des adapters ausgeben lassen, kommen nur ein paar hexzeichen in der ausgabe an. scheint ein unicodeproblem zu sein. ändere ich die projekteinstellungen und nutze char klappt es.

mich würde trotzdem interessieren, wie das mit Unicode funktioniert, hier mal mein code. mein problem liegt bei der _sntprintf Methode.


C++:
#include "stdafx.h"
#include <windows.h>
#include <d3d9.h>
#include <stdio.h>
#include <iostream>
#include <conio.h>


int main(int argc, char* argv[])
{
    PDIRECT3D9 pD3D = Direct3DCreate9(D3D_SDK_VERSION);

    D3DADAPTER_IDENTIFIER9* pAdapter = new D3DADAPTER_IDENTIFIER9[3];

    pD3D->GetAdapterIdentifier(0, 0, &pAdapter[0]);

    TCHAR out[1024];

    _sntprintf(out, 1024, TEXT("Description %s"), pAdapter[0].Description);

    std::cout<<out;


    pD3D->Release();
    delete [] pAdapter;
    getchar();
    return 0;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.08.2006, 18:10 Uhr
Pler
Einer von Vielen
(Operator)


Wie ist der Unicode kodiert?
Normalerweise in utf8, dann sollten aber zumindest die meisten Zeichen richtig rauskommen.

Zeig doch mal so eine ausgabe.


Und normalerweise kommen Konsolenprogramme gewissermaßen zufällig mit unicode zurecht, wenn du nicht gerade mit den Strings rumspielst. (siehe auch hier)
C interessiert ja eigentlich nicht was da konkret in den Strings steht. Wenn du also ein unicode zeichen mit 2 byte Länge drin hast, dann wird das einfach als 2 byte gehalten und dann auch so auf die konsole geschrieben. Die Konsole "erkennt" aber, dass es utf8 ist und wandelt das wieder um.
(erkennt = Konsole muss auch utf8 gestellt werden; aber wie das unter win geht weiß ich nicht, da wird irgendwas mit codepage sonstwas standard sein.)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.08.2006, 18:23 Uhr
~hubert
Gast



Zitat von Pler:
Wie ist der Unicode kodiert?
Normalerweise in utf8, dann sollten aber zumindest die meisten Zeichen richtig rauskommen.

Zeig doch mal so eine ausgabe.


Und normalerweise kommen Konsolenprogramme gewissermaßen zufällig mit unicode zurecht, wenn du nicht gerade mit den Strings rumspielst. (siehe auch hier)
C interessiert ja eigentlich nicht was da konkret in den Strings steht. Wenn du also ein unicode zeichen mit 2 byte Länge drin hast, dann wird das einfach als 2 byte gehalten und dann auch so auf die konsole geschrieben. Die Konsole "erkennt" aber, dass es utf8 ist und wandelt das wieder um.
(erkennt = Konsole muss auch utf8 gestellt werden; aber wie das unter win geht weiß ich nicht, da wird irgendwas mit codepage sonstwas standard sein.)


sieht so derzeit aus:
http://i105.photobucket.com/albums/m239/souljumper/Zwischenablage02.jpg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.08.2006, 18:29 Uhr
~Hubert
Gast


mir ist grade aufgefallen das adapter[0].description char zurückliefert und nicht tchar/wchar_t - könnte das mein problem sein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.08.2006, 18:47 Uhr
xXx
Devil


wcout
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.08.2006, 18:52 Uhr
Bruder Leif
dances with systems
(Operator)


Arbeitet Windoof nicht standardmäßig mit UTF-16?
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.08.2006, 21:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja der einzige fehler ist das cout statt wcout. TCHAR wird zu wchar_t expandiert wenn unicode gesetzt ist, auf nem 2005er ist das standardmäßig aktiviert. und ja, dürfte utf-16 sein. (wo genau ist eigentlich der unterschied zwischen utf-8 und utf-16?)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.08.2006, 21:51 Uhr
Bruder Leif
dances with systems
(Operator)



Zitat von FloSoft:
wo genau ist eigentlich der unterschied zwischen utf-8 und utf-16?


UTF-8: NORMALERWEISE ein Byte pro Zeichen (8 Bit, daher UTF-8), dabei werden die Zeichen 0-127 direkt codiert, alle anderen mit einem Escape-Zeichen "escapet" und durch mehrere Zeichen Bytes codiert.
UTF-16: IMMER 16 Bit pro Zeichen.


Bearbeitung von Leif:
Bytes natürlich

--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 20.08.2006 um 21:52 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.08.2006, 21:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


aso stimmt das war das doofe ja das man utf-8 immer nicht so einfach erkennen kann ob das vorliegt. Ja Imho benutzt windows utf-16, da es immer shorts sind pro buchstabe.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: