Konvertieren von UTF-8 in unicode-c++
Wie kann ich umwandeln ú innerhalb einer c++ - Anwendung, in denen die Anwendung erhält das Zeichen als UTF-8-Kodierung %C3%BA und speichern Sie Sie als unicode-Entsprechung %FA. Ich möchte nur wissen, wie ich gehen würde, über das schreiben von code zum ausführen dieser Kodierung
- utfcpp.sourceforge.net?
- msdn.microsoft.com/en-us/library/dd374130(v=vs. 85).aspx ?
- Nur für das Protokoll, mit Bezug auf deinen Titel: UTF-8 Unicode. Und die standardisierte Art und Weise der Angabe der code-point wäre
U+00FA
(mit mindestens 4 hex-Ziffern, aber bis zu 6). - Sie sehen, die Regeln für UTF-8, unicode-und url-Kodierung etc. und Ihnen bei der Implementierung im code. Ich kenne keinen anderen Weg, die Frage zu beantworten. Es könnte Ihnen helfen, Fortschritte, wenn Sie sagte, speziell, wo Sie stecken. Ich würde brechen das problem in drei Schritten, URL-decode ("konvertieren" %xy usw. Charakter-Wert), UTF-8 zu unicode code point (dies ist konvertiert zum Beispiel C3 BA FA, das ist das schwierige Schritt), URL-Codierung (wieder die %'s). Jeder dieser Schritte ist einfacher als das Allgemeine problem, wählen Sie einfach die einfachste und code, der einer der ersten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schrieb einige code zu tun gestern...
Ich sage nicht, dass dies der "perfekte" Weg, dies zu tun, aber es scheint zu funktionieren für alle testcases ich habe durch Sie laufen (ich schrieb beide Richtungen für diesen Zweck).
Werde ich überlasse es Ihnen, zu übersetzen, "%NN" in einen integer-Wert.
utf32_to_utf8
undutf8_to_utf32
; das Wort "unicode" ist ein bisschen überlastet und wird manchmal verstanden als utf-16.utf8_to_html
, und produziert eine"ሴ"
string.%
Zeichen, und konvertieren von hex in eindeque<int>
. Das Grundprinzip ist, dass der Beginn einer UTF-8-code hat mindestens zwei höchsten bits gesetzt (daher dert & 0xc0 == 0xc0
), gefolgt von einem null-bit, und "Nutzlast" - bits (2-5 bits). Die restlichen bytes haben10
in die höchsten zwei bits, und dann 6 bits des "payload", in der unteren bits. In Ihrem Fall ist es eine zwei-byte-Codierung, so dass erste byte enthält die oberen 5 bits und das zweite byte die unteren 6. BA ist 10111010, so gibt 111010 (als untere bits), C3 ist 0x11000011, so fügt 00011, was 0001111010 = 0x0FA.