Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem 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 ] > 2 < [ 3 ]
010
09.08.2007, 16:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Blubber2063:
Und das es keiner ist weisst du woher, sollte ein Betriebsystem Unicode für Dateinamen zulassen, dann kommt man mit der STL Lösung nicht sehr weit, da Unicode sich ja aber für den Standardzeichensatz mit Ascii deckt, wäre das also nicht unbedingt schlecht gewesen hier für Dateinamen auch Unicode zuzulassen.

mal davon abgesehen das unicode die zukunft ist. und wenn ein system nicht mit unicode umgehen kann - dann geht der rest (wofstream und co) höchstwahrscheinlich genauso schief.

Ansonsten: sind nicht alle Designfehler von irgendjemanden "gewollt" (ob bewusst oder unbewusst).

Ich find das nur als diskrepanz zu ihrem sonstigen System da plötzlich wstring und string durch die gegend zu würfeln - das hat nich mal Microsoft in ihrer MFC geschafft

Achja: Es gibt kein "unportabel" bei der C++-Library - DIE schreibt schließlich irgendwo mit vor was auf einem System gehen soll und was nicht ...
--
class God : public ChuckNorris { };

Dieser Post wurde am 09.08.2007 um 16:45 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
09.08.2007, 16:55 Uhr
~wissender
Gast


Ne, das siehst du falsch! Widechars können auch dann in Dateien geschrieben werden wenn ein System kein Unicode unterstützt. Und trotz das Unicode die Zukunft ist, gibt (und vor allem) gab es viele Systeme die es nicht unterstütz(t)en. Aber Unicode Zeichen in eine Datei schreiben und Unicode Dateinamen verwenden sind zwei paar Schuhe. Dateinamen sind wie gesagt sehr sehr Betriebssystemabhängig und genau hier liegt das Problem und genau deshalb werden keine Widechar Strings unterstützt! Zurecht! Der Standard kann zwar genau vorschreiben was wo zu geschehen hat, aber er kann nicht betriebssystemspezifische Dinge berücksichtigen. Deshalb gibt es momentan ja auch noch keine Multithread-, Netzwerk-, oder Dateioperationenunterstützung im Standard! Weil dieser komfortabel auf allen Systemen anwendbar sein soll und darum haben keine systemspezifischen Dinge irgendetwas im C++ Standard verloren.

Das kann in Zukunft ganz anders aussehen, aber das Fehlen von Widechar Strings für Dateinamensangaben ist hoch korrekt und definitiv kein Designmangel!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
10.08.2007, 01:27 Uhr
0xdeadbeef
Gott
(Operator)


Klar geht das mit Unicode-Dateinamen - die lassen sich doch locker auch in einen char* verpacken. Zumindest gehts bei mir (locale de_DE.UTF-8).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
10.08.2007, 06:46 Uhr
~wissender
Gast



Zitat von 0xdeadbeef:
Zumindest gehts bei mir (locale de_DE.UTF-8).


Naja, das ist ja die Kritik. Das Dateinamen mit anderen Zeichen nicht gehen. Aber Systemspezifische Lösungen sind ja möglich, z.B. über std::wifstream stream( _wfopen( L"test.txt", L"r" ) );
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
10.08.2007, 08:37 Uhr
(un)wissender
Niveauwart


C++ versteht überhaupt keinen Unicode. Die ganzen w-Sachen sind größtensteils unbrauchbar bzw. überholt und nicht plattformunabhängig. C++ kennt so ungefähr die Unicodekodierungen UCS-2 oder UCS-4, je nach Compiler.
Ich hoffe, in C++0x wird endlich Unicode eingeführt.

Zu den Dateinamen: Natürlich geht das mit Unicode. Siehe boost::filesystem.
Wenn Unicode seinen Weg in C++0x finden sollte, dann wird es auch std::wfstream(wchar_t *) geben.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
10.08.2007, 09:00 Uhr
~wissender
Gast


C++ bietet die Grundlagen für Unicode, nämlich widechars! Es kennt aber keine Kodierungen was auch seinerseits garnicht notwendig war. Und wegen der Dateinamen: Klar, boost bietet Systemspezifische funktionalität an, das kann sich der Standard aber nicht erlauben! Und ja: Unicode soll wohl im neuen Standard unterstützt werden. Und ja: dann wird es wohl auch entsprechende Funktionen für die Streamtemplates geben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
10.08.2007, 09:28 Uhr
(un)wissender
Niveauwart



Zitat von ~wissender:

C++ bietet die Grundlagen für Unicode, nämlich widechars!


Nein. widechars sind einfach nur andere Chartypen. Länge ist übrigens ohnehin nicht gnau definiert.
char kann auch "Grundlage" für Unicodekodierung sein, siehe UTF-8.


Bearbeitung:

boost:::filesystem ist plattforunabhängig, so wie iostream auch.
Bedauerlicherweise heißt das wohl nicht, dass das Verhalten im Detail auf allen Plattformen identisch ist. Im Standard ist das lustig gehandhabt, da werden dann halt "Definitionslücken" gelassen.




Bearbeitung:

mal die tippfehler des Fettschrifts korrigiert - EndTag nich mit \ - sondern mit / !


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 10.08.2007 um 11:44 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
10.08.2007, 09:34 Uhr
~wissender
Gast


Genau, nur kommst du da nicht besonders weit mit. Und ja, mir ist bewusst das der Datentyp wchar_t nicht auf eine bestimmte Länge festgelegt wurde. Aber er muss mindestens so groß sein um alle Zeichen des größten unterstützen Zeichensatzes aufnehmen zu können.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
10.08.2007, 09:51 Uhr
(un)wissender
Niveauwart



Zitat von ~wissender:

Aber er muss mindestens so groß sein um alle Zeichen des größten unterstützen Zeichensatzes aufnehmen zu können.


kannst du das belegen? C++ unterstüzt außer ASCII 7 Bit keine Zeichensätze, und selbst da bin ich mir nicht sicher, ob das im Standard überhaupt erwähnt wird. Ich denke wchar_t ist einfach definiert als sizeof(wchar_t) >= sizeof(char).


Zitat von ~wissender:

Genau, nur kommst du da nicht besonders weit mit.



Darum geht es auch nicht. Deine Aussagen sind oft unpräzise bis falsch. Das kann man so nicht stehen lassen.
Aber ich denke es ist alles gesagt, flamewars sind langweilig.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
10.08.2007, 09:57 Uhr
~wissender
Gast


Nö, ist nicht alles gesagt. Was ist denn an meinen Aussagen falsch? Unpräzisise kann ich ja noch akzeptieren, aber falsch definitiv nicht! Es ging ursprünglich um einen angeblichen Designmangel, der aber nicht existiert, wenn dann ist das ein gewollter Designmangel!

Zu deiner Frage: Der Standard sagt zu wchar_t:


Zitat:

-5- Type wchar_t is a distinct type whose values can represent distinct codes for all members of the largest extended character set specified among the supported locales (lib.locale). Type wchar_t shall have the same size, signedness, and alignment requirements (basic.types) as one of the other integral types, called its underlying type.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


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: