Universal characters escapen



  • Hi, ich rätsel gerade wie man "universal" characters richtig schreibt/escaped.
    Ich habe mal ein wenig bei Microsoft in der Char Klasse von C# geschaut. Klar das ist kein C++ aber dort werden character im ascii Zahlenbereich mit \x eingeleitet. Surrogate characters aber dagegen mit \u. Vielleicht ist Microsoft, da aber auch nur selber inkonsequent. Da ich char32_t verwende hätte ich jetzt getippt, dass ich mit \U escapen muss. Evtl. ist auch das erste U vom _T Macro U'\U...' doppelt gemoppelt? Aber so '\U...' geht es halt auch nicht. Scheinbar funktioniert nur \x, aber ist das dann auch richtig?

    #define _T(x) U##x
    
    	// Geht, aber richtig so?
    	char32_t cHighSurrogateStart1 = _T('\xD800');
    	char32_t cHighSurrogateEnd1 = _T('\xDBFF');
    	char32_t cLowSurrogateStart1 = _T('\xDC00');
    	char32_t cLowSurrogateEnd1 = _T('\xDFFF');
    	char32_t cAscii1 = _T('\x007F');
    	char32_t cLatin11 = _T('\x00FF');
    
    	// Geht nicht (error: invalid universal character):
    	char32_t cHighSurrogateStart2 = _T('\uD800');
    	char32_t cHighSurrogateEnd2 = _T('\uDBFF');
    	char32_t cLowSurrogateStart2 = _T('\uDC00');
    	char32_t cLowSurrogateEnd2 = _T('\uDFFF');
    	char32_t cAscii2 = _T('\u007F');
    	char32_t cLatin12 = _T('\u00FF');
    
    	// Geht nicht (error: incomplete universal character name)
    	char32_t cHighSurrogateStart3 = _T('\UD800');
    	char32_t cHighSurrogateEnd3 = _T('\UDBFF');
    	char32_t cLowSurrogateStart3 = _T('\UDC00');
    	char32_t cLowSurrogateEnd3 = _T('\UDFFF');
    	char32_t cAscii3 = _T('\U007F');
    	char32_t cLatin13 = _T('\U00FF');
    


  • Hallo,

    der Fehler 'incomplete universal character name' kommt, weil \U 8 Zeichen danach erwartet, also z.B. '\U00000000'.

    Lies mal String and Character Literals (C++) unter Abschnitt "Surrogate Pairs". Es ist also nicht erlaubt Werte im Bereich D800-DFFF anzugeben (daher der Fehler 'invalid universal character'), sondern du mußt den passenden 'code point' dazu angeben - unter The Surrogate Pair Calculator etc. gibt es eine Tabelle dazu (etwas nach unten scrollen).


Log in to reply