2016-07-24 19 views
-1

Ich möchte etw. wie der folgende Code ... Hat jemand eine Idee? Danke :)Zugriffscode in QString mit Unicode-Terminator

QString x = QString("\ue001"); 

if(x.startsWith("\ue")) { 
    //... 
} 
+0

Zunächst ist das \ u001 gemeint als Text oder als Unicode-Symbol e001? – deviantfan

+0

Es ist das Unicode-Symbol e001 .... –

+0

Verwenden Sie einen C++ 11-fähigen Compiler? –

Antwort

1

UTF8 zu erhalten, Sie

QString x = QString("\ue001"); 

mit

QString x = QString(u8"\ue001"); 

ersten ersetzen müssen.

Über die Überprüfung, ob der erste Codepunkt Calue mit Hex beginnt. E: Ein Codepunkt mit dem Wert

\ue??? 

(mit einem beliebigen Hexadezimalziffer für jede?) Hat folgende Binärdarstellung in UTF-8 (mit 1 oder 0 für jedes?):

11101110 10?????? 10?????? 

Unter der Annahme, die Bytes sind gültig UTF8, der erste 1110 gibt an, dass die nächsten zwei Bytes mit 10 beginnen werden, also muss nicht geprüft werden.

Für den einfachsten Fall genügt es zu prüfen, ob das erste Byte (wenn die Zeichenfolge nicht leer ist usw.) gleich 0b11101110 ist, also 0xee.

Der nicht so einfache Fall UTF8 kann trotz einer festen Byte-Reihenfolge eine Stückliste haben. Wenn die Zeichenfolge mindestens 4 Byte und die ersten 4 Byte

sind, ist die Überprüfung ebenfalls erfüllt.

+0

Abgesehen von der String-Konstruktion ist QString in UTF-16 kodiert. Um zu überprüfen, ob der erste Codepunkt in der Zeichenkette mit dem Formular U + Exxx übereinstimmt, reicht es aus, wenn Sie überprüfen, ob die erste Codeeinheit tatsächlich zwischen 0xE000 und 0xEFFF liegt (da der U + Exxx-Bereich in UTF-16 codiert ist) Wert) ... – peppe

+0

Danke für Ihre Antworten, aber ich muss den Wert "001" von QString ("\ ue001") in einen anderen QString => QString ("001") konvertieren ... und ich möchte QString konvertieren ("001") zu QString ("\ ue001"). Ich brauche das für einen interaktiven IconFont Userinterfacedesigner ... Der Benutzer muss folgendes eingeben: "\ ue001" und so kann er einen IconFont von Google Material in der Benutzeroberfläche setzen, die mit Qt Quick geschrieben wurde. Vielen Dank :) –

0

Ich habe eine Lösung von einem Tag irgendwo im World Wide Web:

QString SomeClass::convertStringToUnicode(QString stringCode) 
{ 
    int idx = -1; 
    while((idx = stringCode.indexOf("\\u")) != -1) { 
     int hex = stringCode.mid(idx + 2, 4).toInt(0, 16); 
     stringCode.replace(idx, 6, QChar(hex)); 
    } 
    return stringCode; 
} 

Der String mit einem doppelten Backslash zu beginnen hat.