UTF-8 Rätselspass

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UTF-8 Rätselspass

    Moin!

    Ich wundere mich gerade über eine UTF und NSString Spielerei und vielleicht kann mir mal jemand den fehlenden Klaps auf den Hinterkopf geben:

    Quellcode

    1. irb(main):010:0> NSString.stringWithUTF8String:"\u00e4"
    2. => nil
    3. irb(main):011:0> NSString.stringWithUTF8String:"\u2026"
    4. => "&"
    Der erste Versuch sollte laut Character Palette ein "ä" geben, stattdessen bekomme ich aber ein nil zurück. Was mache ich falsch? Wie kann ich aus "\u00E4" ein "ä" bekommen?

    Viele Grüße
    Christian
  • RE: UTF-8 Rätselspass

    Boah, straf mich Lügen, aber: Das führende 00 wird als 00 und damit NUL interpretiert.

    Bist du dir sicher, dass das das UTF-8-Code ist? Zusammengesetzte Zeichen beginnen eigentlich nicht mit 00000000, sondern mit 11xxxxxx.

    Wenn du ein ä meinst (Unicode 00e4), dann ist der UTF-8 C3 A4. Warum?

    e4 ist binär 11100100, benötigt also 8 Bit.

    2-Byte-Code beginnen mit 110xxxxx. Danach folgt ein Byte mit 10xxxxxx.

    Friemmeln wir e4 da herein, entsteht:
    11000011 10100100 = C3 A4

    Alles klar?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: UTF-8 Rätselspass

    Hmm... sicher bin ich mir nicht ;)

    Ich habe hier einen Webserver den ich abfrage, welcher mir Antworten wie z.B. "Begriffskl\u00e4rung" zurück gibt. Das möchte ich so natürlich nicht ausgeben... davon möchte ich gerne einen ordentlichen NSString haben.
  • RE: UTF-8 Rätselspass

    In Leopard (vielleicht auch schon Tiger) ist ein ähnliches Tool schon eingebaut.

    Wenn man die Tastaturtabelle über die Systemeinstellung in den Statusbar anzeigt (bei mir die Deutsche Flagge), dann gibt es da einen Menüpunkt "Zeichenpalette einblenden". Das sieht dann so aus:
  • RE: UTF-8 Rätselspass

    Original von cmittendorf
    Der erste Versuch sollte laut Character Palette ein "ä" geben, stattdessen bekomme ich aber ein nil zurück. Was mache ich falsch? Wie kann ich aus "\u00E4" ein "ä" bekommen?

    Das ist weder UTF8- noch UTF16-spezifisch, es sind Unicode-Escapes in ASCII. NSNonLossyASCIIStringEncoding sollte das erledigen. Zudem brauchst Du (fürs Testen) zwei Backslashs, wenn Du einen Backslash in einem Stringliteral im Code angeben willst, deshalb kommt null zurück.

    Quellcode

    1. NSLog(@"String: %@",[NSString stringWithCString:"Begriffskl\\u00e4rung" encoding:NSNonLossyASCIIStringEncoding]);
    Multigrad - 360°-Produktfotografie für den Mac
  • RE: UTF-8 Rätselspass

    Original von hns
    In Leopard (vielleicht auch schon Tiger) ist ein ähnliches Tool schon eingebaut.

    Wenn man die Tastaturtabelle über die Systemeinstellung in den Statusbar anzeigt (bei mir die Deutsche Flagge), dann gibt es da einen Menüpunkt "Zeichenpalette einblenden". Das sieht dann so aus:

    Das ist mir schon bekannt, hat aber offenkundig nicht diese Funktionalität.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: UTF-8 Rätselspass

    Quellcode

    1. NSString.stringWithUTF8String:"\u00e4"


    Allein dafür gehört der Verfasser gesteinigt ^^
    Diese methodenaufrufe sind nur für accessor gedacht und werden bei allem anderen strikt abgeraten von Seiten von Apple.