Ich versuche, eine UTF-8-Zeichenfolge durchlaufen. Das Problem, wie ich es verstehe, ist, dass UTF-8-Zeichen variable Länge haben, so kann ich Char-by-char nicht einfach iterieren, aber ich muss eine Art von Konvertierung verwenden. Ich bin sicher, dass es im modernen C++ eine Funktion dafür gibt, aber ich weiß nicht, was es ist.Iterating durch eine UTF-8-Zeichenfolge in C++ 11
#include <iostream>
#include <string>
int main()
{
std::string text = u8"řabcdě";
std::cout << text << std::endl; // Prints fine
std::cout << "First letter is: " << text.at(0) << text.at(1) << std::endl; // Again fine. So 'ř' is a 2 byte letter?
for(auto it = text.begin(); it < text.end(); it++)
{
// Obviously wrong. Outputs only ascii part of the text (a, b, c, d) correctly
std::cout << "Iterating: " << *it << std::endl;
}
}
Zusammengestellt mit clang++ -std=c++11 -stdlib=libc++ test.cpp
Von dem, was ich wchar_t
und wstring
sollte nicht verwendet werden, gelesen habe.
Es gibt keine "UTF-8-Zeichen". Bis Sie mit dem Thema vertraut sind, wird es frustrierend und unwillig, in den Code zu schreiben. –
Sind Sie auf einem Unixoid oder auf Windows? Und wollen Sie Codeunits, Codepoints oder Grapheme? (Charakter ist lächerlich kontextabhängig (und selbst der Kontext ist möglicherweise nicht genug, um zu entscheiden), und es gibt zusätzliche Schmerzen im Laden unter Windows) – Deduplicator
Sie können sich hier [http://en.cppreference.com/w/cpp/locale/wstring_convert/from_bytes). Bedenken Sie, dass es in gcc nicht funktioniert, sie haben diesen Teil des Standards noch nicht implementiert, funktionieren aber in clang/libC++ und sollten mit VS2013 IIRC funktionieren. –