Der ISO-8859-5-Standard ist eine Teilmenge des Unicode-Zeichensatzes. Ich möchte testen, ob ein Unicode-Zeichen in einer Zeichenteilmenge von ISO-8859-5 in C++ unterstützt wird. Um dies zu tun, möchte ich eine Funktion wie isLegal unten schreiben, so dass der folgende Code nicht ISO-8859-5 Zeichen herausfiltern wird.Testen Sie, ob ein Unicode-Codepunkt in der ISO-8859-5-Gruppe mit C++ enthalten ist
Angenommen, dass wstring aus einer Unicode-codierten Zeichenfolge stammt.
wstring str = L"AåБ0";
vector<char32_t> bytes(str.begin(), str.end());
for (vector<char32_t>::const_iterator i = bytes.begin(); i != bytes.end(); ++i){
if (isLegal(*i, "ISO-8859-5"))
{
std::cout << (*i) << ' ';
}
}
Der Grund dafür ist, dass ich auf eine Teilmenge der Unicode Obermenge die unterstützten Zeichen begrenzen möchte, so dass der Benutzer keine Zeichen wie Emoji der und Zeichen einreichen kann, die nicht in die unterstützten Sprachen. Danke für Ihre Hilfe.
Gibt es eine einfache Möglichkeit, dies zu tun. Zum Beispiel mit Codecs oder ähnlichem. Zum Beispiel weiß ich über eine Funktion von Qt. Gibt es irgendetwas in diesem Sinne, das mir helfen könnte?
QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
Oder vielleicht eine Bibliothek da draußen, die das für mich tun würde.
Hinweis: Warum verwende ich wstring? Ich verstehe, dass Unicode-Zeichen zwischen 1 und 4 Bytes pro Zeichen verwenden. Dies ist die Binärdarstellung des Zeichens, die sich von der Darstellung des Zeichens unterscheidet. std: string unterstützt eine Multibyte-Zeichenfolge, aber wenn Sie versuchen, einzelne Zeichen zu isolieren, wusste ich nicht, wo ein Zeichen gestartet wurde und wo es endete, weil die Breite der Bytes in jedem Zeichen inkonsistent war.
So habe ich einen Codec den Multibyte-String in die std :: wstring zu entschlüsseln, die auf wchar_t Templat wird. wchar_t unter Linux ist 4 Byte breit, daher hat jedes Zeichen eine konsistente Breite. Wenn Sie also einen Multibyte-Unicode-Satz in einen wstring setzen, können Sie jedes Zeichen leichter identifizieren, da jedes Zeichen eine konsistente Breite von 4 Bytes hat und alle Unicode-Zeichen in eine 4-Bit-Breite passen, so dass der wstring alle möglichen Zeichen verarbeiten kann Unicode.
Ich stimme diese Frage als off-topic zu schließen, weil es nur ein "Gib mir den Code". –
okay. anscheinend verstehe ich die Kultur hier nicht. Ich suchte nach einer Antwort für ein paar Tage auf Stack over Flow. Ich habe hier nach vielen Jahren der Benutzung der Seite und der Beantwortung von Fragen, wo ich kann, nie eine Frage gestellt. Ich bin gerade dabei, eine Antwort zu finden und werde es veröffentlichen, sobald ich fertig bin. Bitte teilen Sie mir mit, wie ich die Frage umschreiben könnte. –
Wenn Sie den Code selbst zur Verfügung stellen würden, hätten Sie wirklich warten müssen, bis Sie bereit waren, sowohl die Frage als auch die Antwort zu posten, und sie gleichzeitig eingereicht haben. Wir dachten alle, du wolltest, dass wir es einfach für dich tun. Ich stimme wieder zu öffnen; Wenn mehrere andere dasselbe getan haben, können Sie Ihre Antwort posten. –