'\u0080' wird nicht dargestellt

McDonalas

McDonalas

Neues Mitglied
1
Hallo,
ich habe das Problem, dass der UniCode Character '\u0080' nicht ausgegeben wird. Bei den meisten anderen (zumindest Alle, die ich durchprobiert habe) scheint es zu funktionieren.
Auf dem Smartphone kommt statt dem gewollten '€' ein Leerzeichen und auf dem Computer ein '?'.

Ich hoffe, dass mir jemand schnell helfen kann :tongue:

Gruß

McDonalas
 
Wie komst du auf die idee, dass \u0080 in unicode ein Eurozeichen ist?
Das ist ausschließlich in dem Windows-Zeichensatz CP1252 der Fall.
Das Eurozeichen in Unicode ist \u20ac.
 
Zuletzt bearbeitet:
In einer php Datei werden Felder aus einer mysql in utf encodiert (wegen den Umlauten ) anschließend ein json file ausgegeben. Da wo ein "€" kommen sollte, kommt eben der genannte Code. :confused2:
 
utf-8 ist was anderes als Unicode.

Hinter der 0x80 kommt noch ein Byte. Diese beiden zusammen bilden dann 0x20ac. Zeichen > 0x7f werden bei utf-8 mit mehreren Bytes codiert.

Oder anders, Unicode ist nur eine Vereinbarung darüber welches Zeichen welche Nummer hat. utf-8 ist eine (von mehreren) Möglichkeit Zeichenketten (nach der Unicode Vereinbarung) in einer Folge von Bytes (am Ende sind alle Daten nur Bytefolgen) zu codieren.


Der Wikipedia Artikel zu utf-8 ist da dringend jedem zu empfehlen der heutzutage mit Zeichenketten hantiert.

cu
 
Zuletzt bearbeitet:
rihntrha schrieb:
Hinter der 0x80 kommt noch ein Byte. Diese beiden zusammen bilden dann 0x20ac.

Leider auch falsch :D

Das Eurozeichen wird in UTF8 als e2 82 ac codiert. Das sind drei Bytes und ein 80 kommt da nicht vor.

Der Wikipedia Artikel zu utf-8 ist da dringend jedem zu empfehlen der heutzutage mit Zeichenketten hantiert.

Das stimmt allerdings :D
 
Zuletzt bearbeitet:
DieGoldeneMitte schrieb:
Leider auch falsch :D

Ja doch ;-) Ich war zu faul das Nachzuschlagen. Wichtig ist das das Prinzip stimmt ;-)

Aber wo hat er da jetzt die 0x80 gesehen? :confused:

cu
 
In meiner php-Datei steht:

Code:
while($row=mysql_fetch_assoc($result))
{
   $row['text'] = utf8_encode ( $row['text'] );     
$output[]=$row;
}
print(json_encode($output));

In der Json finden dann folgende "Auswechselungen" statt:

\u00df -> ß
\u00e4 -> ä
\u00fc -> ü
\u0080 -> €


Und bis auf das letzte wird von Java auch alles richtig erkannt.

Danke für die bisherigen Antworten, ich werde mir den Artikel mal durchlesen.
 
utf8-encode convertiert von ISOxxxx nach utf-8. Ist der String aber schon utf-8 dann wird eine erneute Konvertierung den kaputt machen.


Ähm, OOP... Was macht PHP da? Irgendwie scheint mir das da nicht wirklich Objektorientiert :confused: Strings scheinen wirklich keine encode/decode Funktionen zu haben.
Und ich vermute jetzt einfach mal die Zuweisung und das Auslesen findet immer in utf8 statt?

Und json ist eh immer utf8? Egal, ist schon zu spät für mich ;-) Da muss man sich dann wohl mal ernsthaft mit beschäftigen was PHP da genau macht.

cu
 
Zuletzt bearbeitet:
Aber ist der String nicht in utf-8, da ohne Konvertierung (gar)keine Umlaute bzw. Sonderzeichen angezeigt werden.

Was meinst du damit? Dieses PHP-Skript (Ohne Kommentare ca. 15 Zeilen) fragt Daten aus einer MySQL ab und gibt diese als JSON zurück.
 
Frage ist, welches Encoding deine mysql DB liefert.
Ich möchte fast wetten, dass es cp1252 ist.
Weil utf8_encode iso 8859-1 erwartet, und bei den Umlauten cp1252 und 8859-1 gleich sind, kommt da nur beim Euro Grütze raus.

Wer cp1252 nutzt, benutzt auch Microsoft Works. :D
 
Die Datenbank hat alle Strings als UTF8 gespeichert, zumindest hab ich das unter phpmyadmin so eingestellt
 
Und wie kommen die Werte in die Datenbank? Du musst die dann natürlich auch utf-8 codiert reinschieben.

cu
 
Dies passiert auch wenn ich selbstständig "€"-Zeichen in die Datenbank eintrage. Dann sehe ich diese auch in der Tabelle unter phpmyadmin. Bei Abfrage bekommt das Gerät dann den Code "\u0080", welcher lediglich ein Leerzeichen ausgeben lässt.
 
Wenn dein Windows-Rechner cp1252 fährt und du dort ein Euro eingibst und dieser es nicht transkribiert, übergibt dieser ein \0x80 an die PHP DB. Wenn du von eben diesem Rechner aus die Daten wieder ausliest, bekommst du das \x80 zurück, was dein Rechner als Euro darstellt. (Tipps: Brausereinstellungen, accept-charset Attribut und <meta> Elemente prüfen)

Der Androide macht Unicode und bekommt auch ein \x80, interpretiert es aber nicht als Euro (warum sollte er auch), sondern als nicht druckbares Zeichen.
 
Zuletzt bearbeitet:

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
10
Aufrufe
229
swa00
swa00
SaniMatthias
Antworten
19
Aufrufe
961
swa00
swa00
O
Antworten
15
Aufrufe
2.973
ORHUX
O
Zurück
Oben Unten