1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Import von JSON Daten im UTF-8 Format

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von umsid, 21.03.2012.

  1. umsid, 21.03.2012 #1
    umsid

    umsid Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    03.11.2011
    Hallo Leute,

    erst einmal kurz zu mir:
    Ich bin mehr als ein absoluter Neuling - ich kann gar nicht Java oder Android programmieren - programmiere wohl schon seit mehr als 25 Jahren, aber eben nicht auf dieser Ebene.

    Folgendes Problem:
    Ein bekannter von mir entwickelt eine App für mich.
    Dazu bekommt er Daten von einer php-Website, die ich ihm als JSON im Format UTF-8 zur Verfügung stelle.
    Allerdings hat er Probleme mit UTF-8 und hat nach dem Import jedes mal "komische" Zeichen in seinen Daten.
    Er behauptet jetzt, dass Android "das selbst merkt" und ich ihm die Daten in Ascii zur Verfügung stellen soll.
    Nachdem die Website aber jetzt schon in 7 Sprachen verfügbar ist und noch 5 weitere dazu kommen, ist es unmöglich den Zeichensatz in Ascii abzudecken - UTF-8 ist doch genau dafür da.

    Das Problem ist, mein Freund sitzt in Israel.
    Kann mir jemand vielleicht mit einem 3 Zeiler Codeschnipsel sagen, wie man die Daten in Android correct einliest und darstellt?
    Die Daten kommen von folgendem Link:
    [FONT=&quot]http://prog.ipsc-dvc.org/components/com_ipsc/json_output.php?status=matchdata&match=51[/FONT]

    übrigens hat er auch das gleiche Problem, wenn ich ihm ein XML file sende, das in UTF-8 abgespeichert ist und in Kopf folgende Zeile enthält:
    "<?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="edit_matches">Match ändern</string>
    <string name="edit_scores">Ergebnisse eintragen</string>....."
    Hier kann er das "ä" nicht darstellen und importiert es falsch.

    das kann doch nicht sein - oder?

    Vielleicht erbarmt sich jemand und hilft mir.
    Wie gesagt, programmieren kann ich, habe aber mit Java und Android (noch) nichts am Hut.

    Viele Grüße
    Guenter Friedrich
     
  2. Neeldarax, 21.03.2012 #2
    Neeldarax

    Neeldarax Erfahrener Benutzer

    Beiträge:
    170
    Erhaltene Danke:
    31
    Registriert seit:
    07.12.2010
    Hi umsid,

    also wenn ich deinen Link im Browser öffne sehe ich auch "Günter" anstelle von "Günter".
    Aber mit dem Codesnippet:

    Code:
    HttpResponse response;
    DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(
    		"http://prog.ipsc-dvc.org/components/com_ipsc/json_output.php?status=matchdata&match=51");
    
    BufferedReader reader = null;
    try {
    	response = defaultHttpClient.execute(httpGet);
    	reader = new BufferedReader(new InputStreamReader(response
    			.getEntity().getContent(), "UTF-8"));
    bekomme ich beim reder.readLine() auch "Günter" zurück. Ist es das was du gesucht hast?

    Zum Thema xml habe ich keine Lösung.

    regards
     
  3. Sentence, 21.03.2012 #3
    Sentence

    Sentence Erfahrener Benutzer

    Beiträge:
    242
    Erhaltene Danke:
    51
    Registriert seit:
    27.01.2011
    Phone:
    S3, S6 Edge
    Moin,
    das Problem ist glaube ich eher deine PHP Ausgabe und nicht Android.
    Erstens gibst du einen text/html header und zweitens ist die Ausgabe nicht in UTF8 kodiert, das heißt es fehlt der UTF8 header.
    Mit

    header("Content-type: application/json; charset=utf-8");

    sollte es besser funktionieren. Dann bekommt Android auch Automatisch mit, das es sich um UTF8 Daten handelt.

    MfG

    //EDIT
    Beim XML dann eben
    header("Content-type: text/xml; charset=utf-8");
     
  4. umsid, 21.03.2012 #4
    umsid

    umsid Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    03.11.2011
    Hallo Sentence,

    ich habe JSON wenig Erfahrung.
    Schreibe ich den Header einfach vorne weg ohne Klammern, ohne irgendwas?

    also Quasi:

    header("Content-type: application/json; charset=utf-8");
    { "Matchdata": {"id":"51","name":"HC -lite-","date":"2010-12-04"}, "Squad": [{"id":353,"number":1,"name":"Squad 1"}...........

    Das würde auch die Lösung von Neeldarax erklären.
    Denn der gibt beim Einlesen quasi fest vor, dass es sich um ein UTF-8 File handelt, indem er beim Öffnen das UTF-8 mit angibt.
    Siehe hier:

    reader = new........ "UTF-8"));

    in der JSON definition JSON steht aber auch nicht, dass man den header mit angeben muss.

    vielleicht noch zum Verständniss:
    Den Link, denn ich angegeben habe, der soll quasi NIE im Browser angezeigt werden, das soll der Rückgabewert sein, den eine Android Anwendung zurück bekommt, wenn sie den Link aufruft.
    Packe ich den Header so mit in die Ausgabe, liefert der JSON Validator auf jeden Fall einen Fehler.

    Sorry, dass ich mich so dumm anstelle - aber das ist halt Neuland für mich.

    Viele Grüße und vielen Dank für die Hilfe (die hoffentlich weiter kommt)
    Guenter
     
  5. umsid, 21.03.2012 #5
    umsid

    umsid Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    03.11.2011
    ich gleich noch einmal.

    Das mit dem header hat geklappt - ich stand wohl etwas auf der Leitung.
    Die Website zeigt jetzt die Daten korrect an. Mal sehen, was mein Freund in Israel jetzt dazu sagt.

    erst einmal Danke für die Hilfe, vielleicht muss ich mich noch einmal melden - mal sehen
    Guenter
     

Diese Seite empfehlen