Frage

Ich überarbeite einige sehr alte (10 Jahre) C -Code. Der Code kompiliert UNIX/MAC mit GCC und Cross-Compiles für Windows mit Mingw. Derzeit gibt es THAR -Zeichenfolgen. Ich möchte den TCHAR loswerden und stattdessen eine C ++ - String verwenden. Ist es immer noch notwendig, die Windows-Wide-Funktionen zu verwenden, oder kann ich jetzt alles mit Unicode und UTF-8 tun?

War es hilfreich?

Lösung

Windows verwendet noch UTF16 und wird es höchstwahrscheinlich immer tun. Sie müssen verwenden wstring statt string deshalb. Windows -APIs bieten UTF8 nicht direkt, weil Windows Unicode vor der Erfindung von UTF8 unterstützt wurde.

Es ist daher ziemlich schmerzhaft, Unicode -Code zu schreiben, der sowohl auf Windows als auch auf Unix -Plattformen kompiliert wird.

Andere Tipps

Ist es immer noch notwendig, die Windows-Wide-Funktionen zu verwenden, oder kann ich jetzt alles mit Unicode und UTF-8 tun?

Ja. Leider bietet Windows keine native Unterstützung für UTF-8. Wenn Sie einen ordnungsgemäßen Unicode -Support wünschen, müssen Sie die verwenden wchar_t Version der Windows -API -Funktionen, nicht der char Ausführung.

Soll ich TCHRE aus Windows Code entfernen?

Ja du solltest. Der Grund TCHAR Es existiert, um sowohl Unicode- als auch Nicht-Unicode-Versionen von Windows zu unterstützen. Nicht-Unicode-Unterstützung war bereits im Jahr 2001 ein großes Problem, als Windows 98 noch beliebt war, aber nicht heute.

Und es ist höchst unwahrscheinlich, dass eine nicht-stowsspezifische Bibliothek die gleiche Art von Art von hätte char/wchar_t Überlastung, das macht TCHAR verwendbar.

Also mach weiter und ersetze alle deine TCHARs mit wchar_ts.

Der Code kompiliert UNIX/MAC mit GCC und Cross-Compiles für Windows mit Mingw.

Ich musste schon einmal plattformübergreifende C ++-Code schreiben. (Jetzt schreibt mein Job plattformübergreifend C# Code.) Die Charaktercodierung ist ziemlich schmerzhaft, wenn Windows UTF-8 und UN*X nicht unterstützt, UTF-16. Am Ende habe ich UTF-8 als Hauptcodierung und Konvertierung nach Bedarf unter Windows verwendet.

Ja, das Schreiben von Nicht-Unicode-Anwendungen heutzutage schießt sich in den Fuß. Verwenden Sie einfach die breite API überall, und Sie müssen später nicht weinen. Sie können UTF8 weiter zu wchar_t's, wenn Sie Win32 -API -Funktionen verwenden (das mache ich).

Um Ihre Frage direkt zu beantworten:

Ist es immer noch notwendig, die Windows-Wide-Funktionen zu verwenden, oder kann ich jetzt alles mit Unicode und UTF-8 tun?

Nein, (nicht ascii) UTF-8 wird von der überwiegenden Mehrheit der Windows-API-Funktionen nicht akzeptiert. Sie müssen immer noch die breiten APIs verwenden.

Man könnte in ähnlicher Weise beklagen, dass andere Osen immer noch keine Unterstützung haben wchar_t. Sie müssen also auch UTF-8 unterstützen.

Die anderen Antworten geben einige gute Ratschläge, wie Sie dies in einer plattformübergreifenden Codebasis verwalten können. Es klingt jedoch so, als hätten Sie bereits eine Implementierung, die verschiedene Charaktertypen unterstützt. So wünschenswert wie das Zerreißen, um den Code zu vereinfachen, klingen vielleicht nicht.

Und ich prognostiziere, dass Windows eines Tages, obwohl sie wahrscheinlich nicht vor dem Jahr 2020, UTF-8-Unterstützung hinzufügen wird, indem sie einfach zusammen mit A und W und derselben Art von Linker-Hack die Versionen aller API-Funktionen hinzufügen. Die 8-Bit-A-Funktionen sind nur eine Übersetzungsschicht über den nativen W (UTF-16) -Funktionen. Ich wette, sie könnten eine u-layer semi-automatisch aus der A-Schicht erzeugen.

Sobald sie so lange genug geärgert wurden, über ihre Unicode -Unterstützung des 20. Jahrhunderts ...

Sie werden es immer noch unangenehm machen, es zu schreiben, hässlich zu lesen und standardmäßig nicht portable, indem sie sorgfältig ausgewählte Makros und Standard-Visual Studio-Einstellungen verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top