Unicode Übersetzung
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
1. Übung 1.3 e
Hallo Leute!
Ich hab ne Frage zwecks der Übersetzung von einer Unicode-codierten Zeichenkette:
Unicode ist doch sozusagen international genormt. Woher kommt es dann, dass ich bei dieser Aufgabe jetzt schon 3 unterschiedliche Zeichenketten rausbekommen hab?
Hier poste ich mal die Unicode-Zeichenkette:
40, 9583, 176, 9633, 176, 65289, 9583, 65077, 32, 9531, 9473, 9531
Wenns recht ist poste ich einfach mal die Übersetzer, die ich im Internet gefunden und genutzt habe:
http://rishida.net/tools/conversion/
http://www.codetable.net/decimal/9583
http://unicode-table.com/de/search/?q=9633
Habs auch mal mit der Zeichentabelle von Windows versucht…
Wäre nett wenn mir jemand also sagen könnte:
Warum spucken diese Übersetzer unterschiedliche Zeichen aus?
Befinde ich mich im Dezimalsystem? Und wenn ja, woran kann ich das erkennen?
Macht die Zeichenkette übersetzt einen Sinn? ( Und wenn nur ein lustiger Smilie ist)
Danke schonmal im Voraus
Da musst du was falsch gemacht haben, oder die „Uebersetzer“ sind kaputt.
Hier findest du eine Liste von offiziellen Codepoints: Unicode 15.1 Character Code Charts
Manchmal wird es als Hex oder als Dezimal angegeben. Da musst du etwas aufpassen.
this.
Wenn da steht U+…, 0x… oder &#x… ist es hexadezimal, sonst ist es entweder dezimal oder unklar
Edit: und &#[0-9]* ist immer dezimal.
Ok, danke Leute!
Hab jetzt grade mit der vorgeschlagenen Seite von rudis ausprobiert [quote] Zitat von rudis:
Hier findest du eine Liste von offiziellen Codepoints: http://www.unicode.org/charts/
[/quote]
leider ergibt die Suche zu dem Zeichen von 65289 hier keinen Treffer. So langsam macht mich die Aufgabe echt nervös, ich will doch nur diese Zeichenkette entschlüsseln!
oBdA:
Unicode ist lustig, weil ein- und dieselbe Zeichenkette auf viele verschiedene Arten codiert sein kann. Beispielsweise kann ein ä aus einem U+00E4-codepoint bestehen, das waere einfach das Zeichen direkt (LATIN SMALL LETTER A WITH DIAERESIS). Andererseits geht auch ein kleines a (U+0061LATIN SMALL LETTER A ) und ein kombinierendes Zeichen was die Punkte drueber erzeugt (COMBINING DIAERESIS U+0308). Beide Darstellungen sind gleich gueltig, fuehren aber bei naivem strcmp() zu Differenzen. Will man die vermeiden braucht man entweder eine Normalisierung oder eine intelligentere Vergleichsfunktion (die oft einfach eine Normalisierung verwendet).
Das ist ausserdem nur die Darstellung in Codepoints, d.h. in abstrakten Symbolen, die U±Notation ist also nur ein Eintrag in der Tabelle. Wie dieser Eintrag codiert wird, d.h. was fuer eine Bytefolge da wirklich rausfaellt haengt noch von der Codierung ab (z.B. UTF-8, UCS-2/UTF-16, punycode, etc).
Naives Vergleichen ohne Kenntnis dessen was man da grade vergleichen will reicht also bei Unicode nicht. Lest euch, wenn euch das Thema interessiert mal die erste Antwort bei http://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default durch, die Haelfte gilt generell und nicht nur fuer Perl, und die Perl-Spezifika treten in fast allen anderen Sprachen aehnlich auf. (Und falls euch Listen in der Art interessieren, die ist offtopic aber auch recht nett: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ )
Sehr ausführliche Antwort und ein guter Grund warum ich nicht die Aufgabe in 5 Minuten (wie anfangs gedacht) perfekt bearbeiten kann xD
Vielen Dank!
Hex vs. Decimal! Die Seite nimmt Hex Werte.
Ob der liebe Aufgabensteller wohl wusste, dass die Aufgabe zu so kleinlichen Problemen führen würde?
Jakob, Jakob, Jakob, eieieiei…
Faszinierend…
Die Werte sind dezimal, sonst hätte ich 0x oder sowas davor geschrieben
Ja, die Zeichenkette ergibt Sinn, und Ja, es kommt ein Smilie raus.
Arw: Bitte lies dir die Aufgabe durch; sie hat nichts mit Perl oder UTF-8 zu tun…
Ich habe versucht die Frage zu beantworten, die Aufgabenstellung kann ich vermutlich eh nicht lesen wegen der ueblichen Mimimi-Passwort-Geheimniskraemerei. Deswegen steht “ohne Beachtung der Aufgabenstellung” drueber
Die Aufgabe ist einfach nur hässlich und verschlingt sinnlos viel Zeit für primitives Nachschlagen. Man hätte das mit ASCII machen sollen, da hätte man das direkt über chars mit java direkt machen können.
Kommt bei der zu übersetzenden Zeichenkette wirklich was sinnvolles raus? Also was lesbares, was nicht aus komischen Sonderzeichen besteht?
Edit: oha, nach de zusammenfügen der Zeichen ergibt sich tatsächlich ein Smilie… also hab ichs letztendlich doch richtig Danke für den Hinweis auf die definitiv richtige Seite.
Kann Java keine Codepoints ausserhalb der Basic Multilingual Plane (U+FFFF) oder hab ich das beim kurzen Ueberfliegen nur falsch verstanden?
Danke. Klingt leider nach Schmerzen. Aber damit geht die Aufgabe in Java (mehr oder weniger einfach).