Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » utf-8

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
21.05.2006, 23:11 Uhr
Pler
Einer von Vielen
(Operator)


Hallo.

Ich habe folgendes Programm.
Es liest einfach ne Zeichenkette ein und gibt die letzten fünf Zeichen aus. Wenn nun LANG auf utf-8 gestellt ist gibt es (wie erwartet) Probleme. Bei latin-1 nicht.

Wie wird dieses Problem umgangen? Wird es überhaupt umgangen?
Mir ist bei wc aufgefallen, dass es mit utf-8 auch nicht zurecht kommt. (Liefert immer nur die Anzahl der bytes nicht korrekt die Anzahl der Zeichen)


C++:
#include <stdio.h>
#include <string.h>

int main()
{
        char kette[255];
        int laenge;

        printf( "Bitte Zeichenkette eingeben:\n" );
        gets( kette );

        printf( "Folgende Zeichenkette wurde eingegeben:\n" );
        printf( "%s\n" , kette );
        laenge = strlen( kette );
        printf( "Sie hat %d Zeichen!\n" , laenge   );

        printf( "Und hier sind die letzen fuenf Zeichen der Kette:\n" );
        laenge -= 5;
        printf( "%s\n" , &(kette[laenge]) );

        return 0;
}


Hier werden korrekt die letzten fünf Zeichen ausgegeben: (LANG ist auf latin-1)

bash:

$ ./versuch
Bitte Zeichenkette eingeben:
Hallo Wält!
Folgende Zeichenkette wurde eingegeben:
Hallo Wält!
Sie hat 11 Zeichen!
Und hier sind die letzen fuenf Zeichen der Kette:
Wält!


Hier werden nur die letzten 4 Zeichen ausgegeben (5 Byte): (LANG ist auf utf-8)

Code:
$ ./versuch
Bitte Zeichenkette eingeben:
Hallo Wält!
Folgende Zeichenkette wurde eingegeben:
Hallo Wält!
Sie hat 12 Zeichen!
Und hier sind die letzen fuenf Zeichen der Kette:
ält!


Dieser Post wurde am 21.05.2006 um 23:12 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.06.2006, 02:49 Uhr
Hans
Library Walker
(Operator)


Hi,

keine Ahnung, ob es noch aktuell ist, aber hast Du Dir schon mal die Wide-Character-Funktionen aus dem ANSI-Standard angesehen, also z.B. wcscmp() anstelle von strcmp() ?
Oder hast Du schon mal den Herrn Herold dazu "interviewed"?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.06.2006, 07:01 Uhr
(un)wissender
Niveauwart


Da schient das Problem aber woanders zu liegen. In utf-8 sollte "Hallo Welt" der ASCII-Darstellung entsprechen. Wide-Character-Funktionen haben hiermit auch nichts zu tun. Allerhöchstens die Konvertierungfunktionen, die aber niemand benutzt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.06.2006, 09:27 Uhr
Pler
Einer von Vielen
(Operator)



Zitat von (un)wissender:

Da schient das Problem aber woanders zu liegen. In utf-8 sollte "Hallo Welt" der ASCII-Darstellung entsprechen.


Ja ja... nur habe ich Welt mit ä geschrieben .


Zitat von Hans:

Wide-Character-Funktionen aus dem ANSI-Standard angesehen, also z.B. wcscmp() anstelle von strcmp() ?


Hm. Da habe ich hier gar nicht dran gedacht, da bei utf-8 die Byteanzahl variabel ist; und somit das gleiche Problem auftreten sollte.
Ich habe hier Bücher vom Herrn Herold rumliegen; da wird zwar dieser w-chat-Typ erwähnt, aber das war's dann auch. Das konkrete Buch habe ich allerdings nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.06.2006, 10:10 Uhr
(un)wissender
Niveauwart


Seien wirehrlich, es gibt die Multibyte-Konvertierungsfunktionen, aber die sind Mist und man weiß nicht genau was die konvertieren. Such die eine Lib, fertig.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.06.2006, 11:13 Uhr
Pler
Einer von Vielen
(Operator)


Na mit icnv

Code:
man 3 iconv


scheint sowas schon alles zu funktionieren.

Aber ich sehe schon...

Zitat von mir:

Wie wird dieses Problem umgangen? Wird es überhaupt umgangen?


Das wird wohl kaum beachtet. Sieht so aus, als dürften einige Programme die ein bisschen mit strings rumspielen damit Probleme haben.


Zitat von mir:

Mir ist bei wc aufgefallen, dass es mit utf-8 auch nicht zurecht kommt.


Wenn man bei wc den Schalten -m setzt kommt aber doch die korrekte anzahl der Zeichen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.06.2006, 13:38 Uhr
Hans
Library Walker
(Operator)



Zitat von Pler:
Ich habe hier Bücher vom Herrn Herold rumliegen; da wird zwar dieser w-chat-Typ erwähnt, aber das war's dann auch. Das konkrete Buch habe ich allerdings nicht.

Hi,

nun ja, das genannte Buch hab ich auch nicht, obwohl es den Kritiken nach ja ganz gut zu sein scheint. Ich hab auch ein anderes, das hab ich bei Amazon aber erst gesehen, als ich den Beitrag schon abgeschickt hatte. :/ War ja auch schon spät gestern...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


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: