Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Compiler- und IDE-Forum ::  VisialStudio: MultiByte vs Unicode  
Gehen Sie zu Seite 1, 2, 3, 4  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Der_Knob
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.05.2001
Beiträge: 580
Beitrag Der_Knob Mitglied 14:55:03 28.08.2010   Titel:   VisialStudio: MultiByte vs Unicode            Zitieren

Ich wollte mal ein paar Fragen zu MultiByte vs Unicode Einstellung bei VisualStudio Projekten stellen.

Wie wichtig ist die Umstellung von MultiByte auf Unicode? Wird MultiByte irgendwann nicht mehr unterstützt werden?

Was für Vorteile bringt mir die Umstellung?

Was hat das für Performance Einflüsse hat die Umstellung?

Danke schon mal!

_________________
sally - because we love music
* www.sally-project.org *
xor
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.03.2010
Beiträge: 58
Beitrag xor Mitglied 23:54:17 28.08.2010   Titel:              Zitieren

Vereinfacht gesagt macht Multibyte ab Studio 2008 keinen Sinn mehr.
Die 9x-Windows-Reihe unterstützte nur ANSI (Multibyte) in der WinAPI, dort gab es es kein Unicode (außer man hatte den Unicode-Layer nachinstalliert).
Windows NT+ implementiert beide APIs, wobei intern mit Unicode gearbeitet wird und die ANSI APIs hin- und her-konvertieren mussten... das sollte auch bei Windows 7 weiter so sein.

Nachdem aber mit dem Studio 2008 der Support für NT4 und Win9x eingestellt wurde und die EXEen von diesen System auch gar nicht mehr erkannt werden, macht es keinen Sinn mit Studio 2008 ein Multibyte Programm zu erzeugen. Es würde zwar auf den neueren Versionen von Windows laufen, aber ist performance-technisch gesehen eher ein Nachteil. Letztes Studio für alte Windows Versionen mit Nur-Multibyte ist also 2005.

Wer aber mit TCHARs arbeitet, kann leicht zwischen Unicode und Multibyte umschalten ;)

Ob die ANSI-Versionen der WinAPI irgend wann einmal nicht mehr unterstützt sind ist schwer zu sagen. So lange eine größere Anzahl an Programmen die eine oder andere API nutzt, kann MS es sich eigentlich nicht leisten die Kompatibilität zu brechen. Sogar in Windows Vista und 7 neu eingeführte APIs sind immer nocht doppelt implementiert (ANSI und Unicode) ...
Bedenkt man aber, dass der Support für 16-bit Programme nun auch eingestellt ist, kann es durchaus passieren, dass das übernächste Windows keine ANSI - APIs mehr hat :eek: (da würden einige DLLs kleiner werden :D )

Ein Vorteil von Unicode ist natürlich die korrekte Speicherung und Darstellung von allen weltweit genutzten Codes. Mir ist da eine dumme Backup-Software bekannt, die beim Sichern und Wiederherstellen einiger russischer bzw. japanischer Dateien kaputte Dateinamen generierte ... worauf dann Links nicht mehr funktionierten usw. Sowas ist für mich ein klassicher ANSI-Fehler (da haben meine Programme auch schon darunter gelitten :rolleyes: )
Typischer Fehler ist: Deutsches Windows speichert ANSI-Dateinamen oder URL in eine Datei/Datenbank
Japanisches Windows liest ANSI-String und versucht die Ressource zu öffnen -> FileNotFound/404 ...

lg XOR :)
Der_Knob
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.05.2001
Beiträge: 580
Beitrag Der_Knob Mitglied 14:37:47 29.08.2010   Titel:              Zitieren

Danke für die ausführliche Antwort!

Das hat dann mal alle meine Fragen beantwortet :live:
Da ich mit VS 2008 entwickle werde ich dann auf Unicode umstellen

_________________
sally - because we love music
* www.sally-project.org *
daersc
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.05.2008
Beiträge: 398
Beitrag daersc Mitglied 13:31:06 31.08.2010   Titel:              Zitieren

Wie sieht das denn jetzt aus, wenn ich portierbare Programme für Windows und Linux schreiben will? Verwende ich jetzt auch einfach immer Unicode?

_________________
It's not a bug,
it's a feature!
NichtNachgedacht
Unregistrierter




Beitrag NichtNachgedacht Unregistrierter 21:13:28 31.08.2010   Titel:              Zitieren

daersc schrieb:
Wie sieht das denn jetzt aus, wenn ich portierbare Programme für Windows und Linux schreiben will? Verwende ich jetzt auch einfach immer Unicode?


Wie willst du die WinAPI für Linux benutzen? :o)
daersc
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.05.2008
Beiträge: 398
Beitrag daersc Mitglied 21:24:37 31.08.2010   Titel:              Zitieren

Ich dachte eher an ein übergreifendes Toolkit wie wxWidgets...

_________________
It's not a bug,
it's a feature!
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 22819
Beitrag rüdiger Moderator 21:43:53 31.08.2010   Titel:              Zitieren

xor schrieb:
Die 9x-Windows-Reihe unterstützte nur ANSI (Multibyte) in der WinAPI, dort gab es es kein Unicode (außer man hatte den Unicode-Layer nachinstalliert).


ANSI encoding (korrekt eigentlich Windows 1252) ist doch kein Multibyteencoding. Das passt doch alles schön in ein Byte (256 Zeichen).

_________________
.
xor
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.03.2010
Beiträge: 58
Beitrag xor Mitglied 13:49:36 02.09.2010   Titel:              Zitieren

rüdiger schrieb:
xor schrieb:
Die 9x-Windows-Reihe unterstützte nur ANSI (Multibyte) in der WinAPI, dort gab es es kein Unicode (außer man hatte den Unicode-Layer nachinstalliert).


ANSI encoding (korrekt eigentlich Windows 1252) ist doch kein Multibyteencoding. Das passt doch alles schön in ein Byte (256 Zeichen).


Ja da hast du natürlich recht, wobei meines Wissens "ANSI" (bei API-Funktionen) für so ziemlich alles stehen kann, was aus einzelnen Bytes besteht. Die ANSI-Funktionen arbeiten dann (bitte korregiert mich, wenn ich irre :D ) unter einem chinesischen Windows mit einem chinesischen Multi-Byte (Double-Byte) String, während sie bei uns mit Windows-1252 (also Single-Byte) nutzen.

Für mich bedeutet daher ANSI unter Windows nur "irgend ein lokal-kodierter Byte-String". Aber das ist so nicht korrekt formuliert ... stimmt ;)

Für das Speichern von Daten hat sich UTF8 für mich bewährt, eben weil man es unter Linux stillschweigend für System-Aufrufe nutzen kann. Unter Windows ist das allerdings eine ungute Herumkonvertiererei. Der einzige Verteil ist, das UTF-8 in ein reguläres char-Array passt und so wunderbar system-unabhängig in Dateien geschrieben werden kann. Wenn man unter Windows Unicode benutzt verwendet man immer UTF-16, da der wchar_t 16 bit breit ist, während wchar_t unter vielen Unices 32 bit breit ist und UTF-32 darstellt.

Wer unter Windows
C/C++ Code:
fwrite(L"Hello World", sizeof(wchar_t), 11, f);
C/C++ Code:
fwrite(L"Hello World", sizeof(wchar_t), 11, f);
C/C++ Code:
fwrite(L"Hello World", sizeof(wchar_t), 11, f);

schreibt, bekommt unter Linux mit
C/C++ Code:
wchar_t buffer[20] = { 0 };
fread(buffer, sizeof(wchar_t), 11, f);
C/C++ Code:
wchar_t buffer[20] = { 0 };
fread(buffer, sizeof(wchar_t), 11, f);
C/C++ Code:
wchar_t buffer[20] = { 0 };
fread(buffer, sizeof(wchar_t), 11, f);

Probleme :D

cu
XOR
Der_Knob
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.05.2001
Beiträge: 580
Beitrag Der_Knob Mitglied 18:05:40 02.09.2010   Titel:              Zitieren

mir stellt sich auch noch ein Frage

Warum kann man nicht mehr folgendes schreiben:

std::wstring dirINI;
dirINI = SallyAPI::System::SystemHelper::GetModulePath();
dirINI.append("option.ini");

Also die letzte Zeile... hiefür muss man ja jetzt

dirINI.append(L"option.ini");

oder

dirINI.append(_T("option.ini"));

schreiben... oder liegt das an Project/Compiler Einstellungen?

_________________
sally - because we love music
* www.sally-project.org *
Jochen Kalmbach
Moderator

Benutzerprofil
Anmeldungsdatum: 11.11.2005
Beiträge: 11524
Beitrag Jochen Kalmbach Moderator 18:42:16 02.09.2010   Titel:              Zitieren

Was ist genau dier Frage?
Warum der wstring keine automatische Konvertierung von "const char*" hat?

Das frage ich mich auch schon immer...

_________________
Greetings
Jochen
(Microsoft MVP VC++) My blog about Win32 and .NET: http://blog.kalmbach-software.de/ (deutsch)


Zuletzt bearbeitet von Jochen Kalmbach am 18:42:47 02.09.2010, insgesamt 1-mal bearbeitet
C/C++ Forum :: Compiler- und IDE-Forum ::  VisialStudio: MultiByte vs Unicode  
Gehen Sie zu Seite 1, 2, 3, 4  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.