Automatisch erzeugte Json Datei kann nicht eingelesen werden.

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

    • Automatisch erzeugte Json Datei kann nicht eingelesen werden.

      Hallo,

      ich habe, mal wieder, ein Problem was mich ziemlich verwirrt und wo ich nun eure Hilfe bräuchte.

      Ein Windows Programm erzeugt eine Json Datei welche über ein FTP Account auf einen Webserver gestellt wird.
      Auf diese Json Datei kann ich auch ohne Probleme per URL zugreifen und dort alle Daten einsehen, allerdings ist ein Download von der iOS App nicht möglich.
      Auch ein Einlesen der Datei mittels des VisualJSON Programmes ist nicht möglich. Kopiere ich allerdings den Inhalt komplett und füge ich ihn in eine neue Datei ein funktioniert sowohl das Betrachten mittels VisualJSON als auch der Download mit der iOS App.

      Wo könnte hier das Problem liegen?
    • little_pixel schrieb:

      Hallo,

      Auf diese Json Datei kann ich auch ohne Probleme per URL zugreifen und dort alle Daten einsehen
      Meinst Du damit via Browser?

      Ja genau, per Safari.

      little_pixel schrieb:

      allerdings ist ein Download von der iOS App nicht möglich.
      NSURL > NSData > NSJSONSerialization

      Quelltext?

      Viele Grüße

      Da der Download ja aber funktioniert wenn man sie einmal neu anlegt, mit komplett dem selben Inhalt, dachte ich es wäre eher ein Problem mit der, vom Programm erzeugten, Datei.

      Der Aufruf

      Quellcode

      1. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData *theData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://LINK"]];
      2. [self performSelectorOnMainThread:@selector(jsonData:) withObject:theData waitUntilDone:YES];
      3. });


      In der jsonData Funktion

      Quellcode

      1. NSError *jsonSerializationError;
      2. NSDictionary *jsonDictionary = [NSJSONSerialization JSONObjectWithData:theJsonData options:kNilOptions error:&jsonSerializationError];
    • macmoonshine schrieb:

      Kommen die Daten auch tatsächlich UTF-8-kodiert an?
      Nein natürlich nicht es ist im Ansi Format kodiert. Ja die Kodierung mal zu prüfen da hätte man ja auch mal selber drauf kommen können.


      little_pixel schrieb:

      Dann weißt Du ja jetzt was Dein Problem ist… ;)

      Du kannst auch die NSData-Instanz zu einem NSString "konvertieren" und illegale Zeichen dabei ignorieren.
      Aus diesem String kannst Du dann Deine JSON-Instanz erzeugen.

      Oder mit dem Erzeuger der Datei das Problem durchsprechen.

      Viele Grüße
      Habe das Problem mit der Kodierung mal an die Entwickler des Windows Programmes weitergeben.
      Wollte allerdings selber mal ausprobieren das ganz selbst zu händeln, man weiß ja nie wann die das beheben können.

      Wenn ich dich richtig verstanden habe könnte ich aus dem NSData Objekt einen String erzeugen und daraus wieder ein NSData Objekt machen mit dem ich dann die Json Instanz erzeugen kann.

      Ich habe dazu mal folgendes ausprobiert:

      Quellcode

      1. NSString *testString = [[NSString alloc] initWithData:theJsonData encoding:NSUTF8StringEncoding];
      2. NSData *theTestData = [testString dataUsingEncoding:NSUTF8StringEncoding];
      Allerdings bleibt mein testString hierbei schon nil.
      Hab ich dich da falsch verstanden, oder bin ich nur wieder zu unintelligent das zu lösen?
    • gritsch schrieb:

      die daten sind eben nicht utf8 sondern irgendwie ander codiert. vielleicht windows latin oder sowas in der art.
      du kannst das ja einfach mal rausfinden und dann die korrekte encoding angeben. dann kannst du daraus wieder ein nsdata mit utf8 codierung erstellen und verwednen.
      Jap, kleiner Gedankenfehler meinerseits, bzw nicht genau aufgepasst.
      Mit einem NSASCIIStringEncoding kann ich nun den String erstellen und mir daraus dann ein UTF8 NSData Objekt erzeugen.

      Klappt also nun wie geplant, vielen Dank euch.
    • Chronisch schrieb:

      gritsch schrieb:

      die daten sind eben nicht utf8 sondern irgendwie ander codiert. vielleicht windows latin oder sowas in der art.
      du kannst das ja einfach mal rausfinden und dann die korrekte encoding angeben. dann kannst du daraus wieder ein nsdata mit utf8 codierung erstellen und verwednen.
      Jap, kleiner Gedankenfehler meinerseits, bzw nicht genau aufgepasst.Mit einem NSASCIIStringEncoding kann ich nun den String erstellen und mir daraus dann ein UTF8 NSData Objekt erzeugen.

      Klappt also nun wie geplant, vielen Dank euch.
      glaub ich dir nicht, denn ASCII ist von UTF8 genauso abgedeckt, also würde der parser funktionieren. Du verwendest sicher lossy-conversation wodurch du dann daten verliertst. mach es also korrekt ohne lossy!
    • macmoonshine schrieb:

      Chronisch schrieb:

      Nein natürlich nicht es ist im Ansi Format kodiert.
      ANSI? Was soll das denn für eine Kodierung sein?
      Wenn es nicht UTF-8 ist, ist es eindeutig ein Serverfehler. ;)
      Hatte nur ganz schnell mit Notepad++ auf einem Windows Rechner geschaut und da wird Ansi als Encoding angezeigt.
      Scheint ja aber ASCI kodiert zu sein. Und ja ein Server Fehler ist es auf jeden Fall.
    • Chronisch schrieb:

      Mit einem NSASCIIStringEncoding kann ich nun den String erstellen und mir daraus dann ein UTF8 NSData Objekt erzeugen.
      Dabei gehen dir alle Umlaute und anderen Sonderzeichen verloren.

      Mit curl -I <URL> erfährst du in vielen Fällen die Kodierung der Daten. Oder speichere die Daten in einer Datei, und rufe file -I <datei> auf, dann weisst du, welche Kodierung der Server verwendet.
      „Meine Komplikation hatte eine Komplikation.“
    • gritsch schrieb:

      Chronisch schrieb:

      gritsch schrieb:

      die daten sind eben nicht utf8 sondern irgendwie ander codiert. vielleicht windows latin oder sowas in der art.
      du kannst das ja einfach mal rausfinden und dann die korrekte encoding angeben. dann kannst du daraus wieder ein nsdata mit utf8 codierung erstellen und verwednen.
      Jap, kleiner Gedankenfehler meinerseits, bzw nicht genau aufgepasst.Mit einem NSASCIIStringEncoding kann ich nun den String erstellen und mir daraus dann ein UTF8 NSData Objekt erzeugen.
      Klappt also nun wie geplant, vielen Dank euch.
      glaub ich dir nicht, denn ASCII ist von UTF8 genauso abgedeckt, also würde der parser funktionieren. Du verwendest sicher lossy-conversation wodurch du dann daten verliertst. mach es also korrekt ohne lossy!
      Okay, ich schau mir das nochmal an. Habe auf jeden Fall nach dem Import in meiner App genauso viele Einträge wie in der Json Datei drin sind.
      Ich merke aber ich sollte mich nochmal grundsätzlich über Kodierung informieren.
    • Chronisch schrieb:

      gritsch schrieb:

      Chronisch schrieb:

      gritsch schrieb:

      die daten sind eben nicht utf8 sondern irgendwie ander codiert. vielleicht windows latin oder sowas in der art.
      du kannst das ja einfach mal rausfinden und dann die korrekte encoding angeben. dann kannst du daraus wieder ein nsdata mit utf8 codierung erstellen und verwednen.
      Jap, kleiner Gedankenfehler meinerseits, bzw nicht genau aufgepasst.Mit einem NSASCIIStringEncoding kann ich nun den String erstellen und mir daraus dann ein UTF8 NSData Objekt erzeugen.Klappt also nun wie geplant, vielen Dank euch.
      glaub ich dir nicht, denn ASCII ist von UTF8 genauso abgedeckt, also würde der parser funktionieren. Du verwendest sicher lossy-conversation wodurch du dann daten verliertst. mach es also korrekt ohne lossy!
      Okay, ich schau mir das nochmal an. Habe auf jeden Fall nach dem Import in meiner App genauso viele Einträge wie in der Json Datei drin sind.Ich merke aber ich sollte mich nochmal grundsätzlich über Kodierung informieren.
      ja das glaub ich dir, weil {, [ und " ja in ASCII sind, jedoch wird irgendwo ein sonderzeichen drin sein und dieses verlierst du dann mit der lossy-conversion zu ASCII.
      wenn du uns die daten hochlädst können wir dir sagen was es für eine codierung ist (oder du kannst das system versuchen lassen die codierung zu erkennen: stringEncodingForData)
    • Okay also Curl gibt hier nur das aus:

      Quellcode

      1. HTTP/1.1 200 OK
      2. Content-Length: 642458
      3. Content-Type: application/json
      4. Last-Modified: Wed, 04 May 2016 06:00:11 GMT
      5. Accept-Ranges: bytes
      6. ETag: "ff466f38caa5d11:0"
      7. Server: Microsoft-IIS/8.5
      8. Date: Mon, 09 May 2016 11:44:39 GMT



      Aber mit der file -I <datei> Methode komme ich auf
      text/plain; charset=iso-8859-1