Unicode
-
Hi,
wieso braucht man Unicode? Wieso braucht da jeder Character ein DWORD? Welche Zeichen hat man in Unicode, die man nicht als Multibyte-Zeichen darstellen kann?
-
ausländische Zeichen. Chinesisch, Russisch. Wie willst du das mit 256 Zeichen darstellen?
-
Nicht ein DWORD. Ein Word (16 Bit).
-
@<ausländer>:
Er nannte als Vergleich Multibyte Zeichensätze, kein ANSI.@WebFritzi:
Hast du den Petzold? Da gibts ein ganzes Kapitel nur darüber.Vielleicht krieg ichs zusammen:
Man kann natürlich mit Multibyte Zeichenssätzen jedes Zeichen darstellen (auch ausländische). Das Problem ist nur, manche Zeichen belegen 1Byte, andere 2Byte. Dadurch geht die Effizienz in den Keller.
Wenn man z.B. das 1000. Zeichen eines Strings haben will, muss man bei MultiByte jedes Zeichen durchgehen. Bei unicode oder ANSI reicht ein einfacher Array-Zugriff (a[1000]).[ Dieser Beitrag wurde am 14.12.2002 um 10:35 Uhr von cd9000 editiert. ]
-
Aha. Jetzt hab ich das auch mal gecheckt. Aber was bringt Unicode, wenn man nur deutsche Programme schreiben will???
cu
-
Wegen dem sz und den Umlauten.
-
Aber wenn ich ne MessageBox ausgebe, also:
MessageBox(0,"ßßßßßßäöü","Test",MB_OK);
Dann wird das ja auch richtig ausgegeben, obwohl ich kein Unicode verwende, woran liegt das?
thx & cu
-
weil diese Zeichen einfach im Ascii-Zeichensatz vorhanden sind. Ich glaub Luckie hat nicht ganz recht.
-
Also kann ich doch meine WinAPI-Programme weiter ohne Unicode schreiben, oder?
cu
-
aber wenn ein neues programm schreibst solltest du einfach doch die unicode fähigen funktionen benutzen und das TEXT makro um jeden string setzen. schadet ja nicht, außer ein kleines bisschen mehr schreibarbeit. ist einfach zukunftsbewußt, brauchen tust du es aber nicht wirklich :p
-
@MagiC Creator:
Wenn du nur deutsche Programme schreibst brauchst du (zumindest heute) keinen Unicode (16-bit). Der ASCII-Code (7-bit) unterstütz kein ß und auch keine Umlaute, aber die können auch ohne Unicode im 8-bit Code dargestellt werden.Gruß WoWe
-
Original erstellt von MagiC Creator:
**Aha. Jetzt hab ich das auch mal gecheckt. Aber was bringt Unicode, wenn man nur deutsche Programme schreiben will???cu**
IMHO:
klar, aber glaub nicht das das wesentlich schneller ist. Seit Win2000 wird intern nur noch mit Unicode gearbeitet, das heisst, dein ASCI String muss jedesmal in nen Unicode string umgewandelt werden (wenn du ihn an Systemfunktionen gibst).
-
@MagiC Creator:
Das funktioniert IMHO nur unter einem deutschen Windows. Wenn du ein russisches oder griechisches Windows hast, kommt kein ß mehr raus. Deswegen braucht man unicode. Damit dein deutsches Programm auf jedem Rechner deutsch bleibt.
-
OK, ihr habt mich überzeugt. Ich schwöre, ab heute verwende ich nur noch Unicode :D!
thx & cu
-
@Magic Creator: Dein neues Programm is mir vorhin beim Beenden abgestürtzt. Irgendwas mit Illegal Floatingpoint operation. Kanns aber nicht wieder nachbilden. :p
-
Meinst du graph++ ?
cu
-
ja
-
Was hast du denn für ne Funktion eingegeben?
cu
-
z.B. "lol" und nochmal ne richtige. Aber ich kann's wie gesagt nicht mehr nachbilden! sorry.
-
Macht nix. Ich kann da auch nix machen, da es **wahrscheinlich an der Funktion liegt, die den String ausrechnet, und die ist in einer Dll, und von der hab ich den Quellcode net. Aber DANKE, dass du mir gesagt hast, dass da'n Fehler ist, mir ist bis jetzt nämlich noch keiner aufgefallen.
thx & cu**
-
Hab noch ne Frage zu Unicode.
Ich habe UNICODE definiert.
LRESULT CALLBACK MainProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { static WCHAR *pwBuf; static int iCount; switch(uMsg) { case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd,&ps); SetBkMode(hDC,TRANSPARENT); SetTextColor(hDC,RGB(255,255,255)); TextOutW(hDC,5,5,pwBuf,wcslen(pwBuf)); EndPaint(hWnd,&ps); return 0; } break; case WM_TIMER: { if(wParam == UNICODE_TIMER) { iCount++; swprintf(pwBuf,(const unsigned short *) TEXT("Sekunden: %i"),iCount); } return 0; } break; case WM_CREATE: { SetTimer(hWnd,UNICODE_TIMER,1000,0); pwBuf = new WCHAR[100]; return 0; } break; case WM_DESTROY: { delete pwBuf; KillTimer(hWnd,UNICODE_TIMER); PostQuitMessage(0); return 0; } break; } return DefWindowProc(hWnd,uMsg,wParam,lParam); }
Das Liefert mir lauter '|', woran liegt das? Und warum muss ich TextOutW schreiben?
thx & cu