99 Stimmen

C-Programmierung: Wie programmiert man für Unicode?

Welche Voraussetzungen müssen erfüllt sein, um strikte Unicode-Programmierung zu betreiben?

Bedeutet dies, dass mein Code nicht char und dass Funktionen verwendet werden müssen, die sich mit wint_t y wchar_t ?

Und welche Rolle spielen Multibyte-Zeichenfolgen in diesem Szenario?

3voto

PolyThinker Punkte 5076

Soweit ich weiß, ist wchar_t implementierungsabhängig (wie aus diesem gesehen werden kann Wiki-Artikel ). Und es ist kein Unicode.

3voto

Ich würde keiner Implementierung der Standardbibliothek trauen. Entwickeln Sie einfach Ihre eigenen Unicode-Typen.

#include <windows.h>

typedef unsigned char utf8_t;
typedef unsigned short utf16_t;
typedef unsigned long utf32_t;

int main ( int argc, char *argv[] )
{
  int msgBoxId;
  utf16_t lpText[] = { 0x03B1, 0x0009, 0x03B2, 0x0009, 0x03B3, 0x0009, 0x03B4, 0x0000 };
  utf16_t lpCaption[] = L"Greek Characters";
  unsigned int uType = MB_OK;
  msgBoxId = MessageBoxW( NULL, lpText, lpCaption, uType );
  return 0;
}

2voto

Mike Weller Punkte 44986

Im Grunde wollen Sie mit Zeichenketten im Speicher umgehen wie wchar_t Arrays anstelle von char. Bei jeder Art von E/A (z. B. Lesen/Schreiben von Dateien) können Sie mit UTF-8 kodieren/dekodieren (dies ist wahrscheinlich die gängigste Kodierung), was einfach genug zu implementieren ist. Googeln Sie einfach die RFCs. In-memory sollte also nichts Multi-Byte sein. Eine wchar_t steht für ein Zeichen. Bei der Serialisierung müssen Sie jedoch in etwas wie UTF-8 kodieren, wo einige Zeichen durch mehrere Bytes dargestellt werden.

Sie müssen auch neue Versionen von strcmp usw. für die breiten Zeichenketten, aber das ist kein großes Problem. Das größte Problem wird die Interoperabilität mit Bibliotheken/vorhandenem Code sein, die nur Char-Arrays akzeptieren.

Und wenn es darum geht sizeof(wchar_t) (Sie benötigen 4 Bytes, wenn Sie es richtig machen wollen), können Sie es jederzeit mit typedef / macro Hacks, wenn es nötig ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X