Zum Inhalt springen

UTF-8 Konverterfunktion


Empfohlene Beiträge

Hello Folks!

die Winapi bietet für die Konvertierung von Unicode in 'normale' (ähhh...was ist schon normal??) Zeichen, sowie andersrum, die Funktionen WideCharToMultiByte() und MultiByteToWideChar an.

Jetzt möchte ich diesen Funktionen das Leben einhauchen, bekomme aber keine Ergebnisse geliefert.

In VB sieht das dann etwa so aus:

Dim bytDLTName(32) As Byte, bytSTDName(32) As Byte

bytSTDName(0) = 252

bytSTDName(1) = 10

Call WideCharToMultiByte(CP_UTF8, 0, _

bytSTDName(0), 2, bytDLTName(0), 2, "", 0)

Debug.Print "Wert:"

Debug.Print bytDLTName(0)

Debug.Print bytDLTName(1)

Was kann man hier an meiner Stelle denn so tun???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der vierte Parameter gibt die Anzahl der Zeichen an, nicht der Bytes. Da müsste also eine 1 rein. Der vorletzte Parameter muss bei CP_UTF8 Null sein. Außerdem werden als dritter und fünfter Parameter nicht die Zeichen selbst, sondern deren Adressen erwartet. Ich weiß aber nicht, wie das von VB aus funktioniert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Jahr später...

Ich stehe vor dem selben Problem:

Ich möchte eine Textzeile von UTF8 nach ANSI konvertieren, um Umlaute darzustellen.

Ich habe mich an dieses Beispiel aus der MSDN gehalten:


...

WideCharToMultiByte(CP_ACP, 0, ui->usri2_full_name, -1, dest, 256, NULL, NULL);

Meine Zeile sieht so aus:

WideCharToMultiByte(CP_UTF8, NULL, eString, -1, &AktuellTitel, sizeof(AktuellTitel), NULL, NULL);

eString ist char*, AktuellTitel ist CString.

In eString wird als Textstring ein char[300] übergeben.

Es kommt die Fehlermeldung:

e:\...: error C2664:

'WideCharToMultiByte': Konvertierung des Parameters 3 von 'char *' in 'LPCWSTR' nicht möglich

Wie kriege ich das hin? Auch mit &eString funtkioniert es nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Ich möchte eine Zeichenkette in UTF-8 umwandeln. Mein Code sieht so aus:


LPCSTR mbstring={0};

LPWSTR wcstring={0};

CString text;

int erg=0;


mbstring="ABCdefÄÖÜäöüé\0";


erg=MultiByteToWideChar(CP_UTF8, NULL, mbstring, -1, wcstring, sizeof( wcstring));


text=wcstring;

Im Ergebnis erg erhalte ich 7, aber wcstring ist leer und somit auch text.

Weiterhin bleibt die Frage, wie es umgekehrt geht. Also von UTF-8 in eine Zeichenkette wie in mbstring.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sieht jetzt so aus:


LPCSTR mbstring={0};

WCHAR wcstring[MAX_PATH]={0};

CString text;

int erg=0;


mbstring="ABCdefÄÖÜäöüéÉ\0";


erg=MultiByteToWideChar(CP_UTF8, NULL, mbstring, -1, wcstring, sizeof( wcstring));


text=wcstring;

Ergebnis ist:

erg=7;

text=wcstring="ABCdef";

Das nützt mir nichts, denn ich brauche ja auch die Übersetzung von den anderen Zeichen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm...das könnte evtl. auch an etwas anderem liegen. Wenn du z.B. printf("äöü"); schreibst, bekommst du ja andere Zeichen ausgegeben. Mit printf("%c",132); bekommst du aber ein ä ausgegeben.

Weise den einzelnen Stellen deines Strings mal die Ascii Codes der Sonderzeichen zu und versuche es dann.

Da bin ich mir jetzt aber absolut nicht sicher ob es daran liegt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So wird das nichts. Du musst zuerst aus dem ANSI-String einen Unicode-String machen. Den kannst du dann nach UFT8 konvertieren:

char m[MAX_PATH]={0};
WCHAR w[MAX_PATH]={0};
CString text;
int erg=0;

strcpy(m, "ABCdefÄÖÜäöüéÉ");

erg=MultiByteToWideChar(CP_ACP, 0, m, -1, w, sizeof(w) / sizeof(WCHAR));
erg=WideCharToMultiByte(CP_UTF8, 0, w, -1, m, sizeof(m), 0, 0);

text=m;
[/CODE]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nach UTF-8 geht es jetzt.

Aber ich muss nun noch von UTF-8 nach ANSI konvertieren.


erg=MultiByteToWideChar(CP_UTF8, 0, m, -1, w, sizeof(w) / sizeof(WCHAR));

erg=WideCharToMultiByte(CP_ACP, 0, w, -1, m, sizeof(m), 0, 0);

Ich habe die Codepages getauscht, aber da werden die Umlaute wieder abgeschnitten.

erg=MultiByteToWideChar(CP_ACP, 0, m, -1, w, sizeof(w) / sizeof(WCHAR));

erg=WideCharToMultiByte(CP_UTF8, 0, w, -1, m, sizeof(m), 0, 0);

Hier konvertiert der zweite Aufruf die Umlaute wieder zu utf-8 oder hängt an UTF-8-Zeichen noch mehr UTF-8-Zeichen an, weil er die wieder konvertiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Verstehe ich das richtig, dass du den String "Häuser" als Eingabe für die Konvertierung UTF8 nach ANSI benutzt?

Wie kommst du darauf, dass "Häuser" ein gültiger UTF8-String ist?

Unter Windows ist ä hex E4, also 1110 0100. Damit müsste das Sonderzeichen durch eine Drei-Zeichen-Repräsentation dargestellt werden. Bei den nachfolgenden zwei Zeichen 'u' und 's' ist aber das MSB nicht gesetzt -> ungültiger UTF8-String.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist mir schon klar.

Bevor ich den String konvertiere, lese ich vorher die CodePage aus, so dass der String mit der entsprechenden CodePage konvertiert wird.

Mal noch ne Frage zur Darstellung in der Strukturansicht (CTreeControl):

Wenn ein UTF-8-String eingelesen wird, der z. Bsp. japanische Schriftzeichen enthält, und mit CP_UTF8 in UNICODE konvertiert wird, sehe ich dann die Schriftzeichen oder irgend welche Steuerzeichen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...