CGI und UTF-8
-
Wenn du die Zeit und Muße hast kannst du dir natürlich auch schnell was selbst schreiben. UTF-8 ist ihmo im prinzip ja nicht so schwer. das sollte dann gehen solange du mit der performance keine probleme hast.
ich meinte mich zu erinnern das QT sowas mal drin hatte bin mir aber nicht sicher. evtl gibts auch direct vom unicodekonsortsium (richtiger name?) was.
btw.: wstrings sind platformabhängig: windows utf16 unix/linux utf32.
-
Fencer schrieb:
Wenn du die Zeit und Muße hast kannst du dir natürlich auch schnell was selbst schreiben. UTF-8 ist ihmo im prinzip ja nicht so schwer. das sollte dann gehen solange du mit der performance keine probleme hast.
Selber implementieren ist nur die letzte Lösung und sollte man eigentliche vermeiden. Außer man will es aus Lernzwecke machen. Aber um eine Lösung zu finden, eher nicht.
Fencer schrieb:
btw.: wstrings sind platformabhängig: windows utf16 unix/linux utf32.
Das ist Quatsch! wchar_t ist je nach Compiler unterschiedlich breit, hat nichts mit Linux oder Windows zu tun. Ist aber meistens irrelevant.
-
DarkMaTTi schrieb:
bei IUC bekomm ich nachdem Einbinden und der Verwendung von UnicodeString fehler:
`G:\Workspace\CodeBlocks\GDTest\main.cpp|68|undefined reference to `__imp___ZN7icu_4_213UnicodeStringC1Ev'|
G:\Workspace\CodeBlocks\GDTest\main.cpp|164|undefined reference to `icu_4_2::UnicodeString::~UnicodeString()'|
G:\Workspace\CodeBlocks\GDTest\main.cpp|164|undefined reference to `icu_4_2::UnicodeString::~UnicodeString()'|
`
Und? Fehler beheben! Steht doch da was los ist. Du mußt die Lib linken.
-
Fencer schrieb:
btw.: wstrings sind platformabhängig: windows utf16 unix/linux utf32.
Das ist Quatsch! wchar_t ist je nach Compiler unterschiedlich breit, hat nichts mit Linux oder Windows zu tun. Ist aber meistens irrelevant.
meinte ich. in meiner gedanken hab ich versehentlich win=vc und linux=gcc gesetzt sorry.
-
das Programm muss nur auf Windows lauffähig sein.
Und? Fehler beheben! Steht doch da was los ist. Du mußt die Lib linken.
dass ist ja das Problem, ich habe die Include-Pfade gesetzt und die include's gemacht, im Linker die pfade zu den lib gesetzt und die .dll's ausm /bin zum Projekt hinzugefügt so wie ich es bei der GDlib gemacht habe. Aber trotzdem kommt dieser Fehler. Wenn ich z.B.: UBool benutzte funktioniert es. Was mach ich den noch falsch???
mfg DarkMaTTi
-
Nein, wstring ist falsch! UTF8 ist einfach Unicode in 8 Bit verpackt. Sprich du kannst einen einfachen std::string nehmen. Nur ist eben ein Zeichen nicht unbedingt ein char groß.
http://en.wikipedia.org/wiki/UTF-8Worum geht es dir genau? Wenn du UTF-8 ausgeben willst, dann musst du einfach nur UTF-8 Strings in deiner Datei benutzen. Wenn du bestehende Daten in UTF-8 konvertieren willst, dann kannst du das mit ccodecvt tun.
Ansonsten gibt es noch http://utfcpp.sourceforge.net/ zur Behandlung von UTF-8 Strings.
-
rüdiger schrieb:
Nein, wstring ist falsch! UTF8 ist einfach Unicode in 8 Bit verpackt. Sprich du kannst einen einfachen std::string nehmen.
Warum string??? das ist ein ASCII-String, der absolut für UTF-8 ungeeignet ist.
Der Fragesteller hat einen wstring, in dem er wahrscheinlich UCS-2 oder UCS-4 benutzt. Und er will nach UTF-8 umwandeln, dafür brauch er gar keinen String. Das was er rauskonvertiert ist "flüchtig".
-
Natürlich kannst Du einen UTF-8 konvertierten String in einem std::string halten, man muss dann halt nur bissel aufpassen:
std::string("ä").length(); // 2Einfach mal http://utfcpp.sourceforge.net/ aufmerksam lesen und es wird denk ich einiges klarer werden.
Gut Schuß
VuuRWerK
-
Bulli schrieb:
rüdiger schrieb:
Nein, wstring ist falsch! UTF8 ist einfach Unicode in 8 Bit verpackt. Sprich du kannst einen einfachen std::string nehmen.
Warum string??? das ist ein ASCII-String, der absolut für UTF-8 ungeeignet ist.
Nein. UTF-8 wurde doch genau dafür entworfen, dass es einfach in 8 Bit großen Strings verwendet werden kann. Nur ist eben nicht unbedingt ein Zeichen gleich ein
char(siehe VuuRWerKs Posting).
-
VuuRWerK schrieb:
Natürlich kannst Du einen UTF-8 konvertierten String in einem std::string halten, man muss dann halt nur bissel aufpassen:
std::string("ä").length(); // 2Weißt du, dann kannst du auch
std::vector<char>benutzen! Und das ist nicht der Sinn, wenn mir jemand verklickern will, das std::string UTF-8-fähig ist. Genau DAS zeigt, das es nicht so ist. Ein String-Interface soll mich unterstützen, und nicht behindern.
-
zum Thema intener Datentyp: http://www.kharchi.eu/wiki/doku.php?id=cpp:std:string#internationalisierung
mir geht es einfach darum dass die Ausgabe die ich mit meiner CGI mache UTF-8 Codiert ist. VC++2008 arbeitet mit Unicode trotzdem ist die Ausgabe in ISO und nicht UTF-8???
mfg DarkMaTTi
-
Vielleicht hilft dir folgendes von Roger Wilco:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-244120-and-start-is-10.htmlDu hast zwar kein Konsolen-Thema, aber du schreibst wahrscheinlich auch in einen Stream (wcout ist ja auch nur ein stream-Object).
-
warum die Biblo nicht funzt kann keiner sagen oder?
-
DarkMaTTi schrieb:
das Programm muss nur auf Windows lauffähig sein.
Und? Fehler beheben! Steht doch da was los ist. Du mußt die Lib linken.
dass ist ja das Problem, ich habe die Include-Pfade gesetzt und die include's gemacht, im Linker die pfade zu den lib gesetzt und die .dll's ausm /bin zum Projekt hinzugefügt so wie ich es bei der GDlib gemacht habe. Aber trotzdem kommt dieser Fehler. Wenn ich z.B.: UBool benutzte funktioniert es. Was mach ich den noch falsch???
mfg DarkMaTTi
Den Pfad nur hinzufügen reicht ja nicht. Hast du auch die .a-Datei angegeben?
Und hast du überhaupt den MSVC im Einsatz? Weil wenn ich unter http://icu-project.org/download/4.2.html#ICU4C schaue, gibts ja nur MSVC-Downloads. Oder hast du für deinen MinGW (steht zumindest Codeblocks in deinem Pfad) die Lib selber gebaut?
-
Problem gelöst -> Eclipse CTP und MinGW kann mit UTF-8 umgehen und ausgeben. Auch wenn die Einrichtung umständlich ist...
mfg DarkMaTTi
-
Ich glaub das löst nicht Dein Problem. Die Ausgabe in Eclipse ist vielleicht UTF-8 fähig aber die Windowsconsole oder irgend ein anderes Ausgabemedium kann es nicht von vornherein, und schon hast Du wieder Probleme

Gut Schuß
VuuRWerK