Xcode json_encode vs. UTF8

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

  • Xcode json_encode vs. UTF8

    Hallo Kollegen,

    ich hab ein Problem mit den Umlauten in Xcode.

    Ich hol mir einen Text via PHP von einer Mysql-Datenbank

    Quellcode

    1. NSURL * url_Game = [NSURL URLWithString:@"http://localhost:8888/loadProject.php"];
    2. NSURLSessionTask *task_Game = [[NSURLSession sharedSession] dataTaskWithURL:url_Game completionHandler: ^(NSData *data_Game, NSURLResponse *response, NSError *error)
    3. {
    4. if (data_Game) {
    5. NSError *error = nil;
    6. NSAssert(!error, @"error");
    7. cityarray = [[NSMutableArray alloc] init];
    8. NSMutableArray *response = [NSJSONSerialization JSONObjectWithData:data_Game options:NSJSONReadingMutableContainers error:&error];
    9. [cityarray addObjectsFromArray:response];

    Die Ausgabe ist dann so bei den Umlauten (Test Text):
    FÜR

    Wenn ich aber mein PHP File über den Browser aufrufe, werden alle Umlaute richtig ausgegeben.

    Quellcode

    1. $con=mysqli_connect("localhost","test","","test");
    2. mysqli_query($con, "SET NAMES 'utf8'");
    3. if (mysqli_connect_error($con))
    4. {
    5. echo "Failed to connect to MySQL: " . mysqli_connect_error();
    6. }
    7. $sql = "SELECT beschreibung FROM Picture Where id = 0";
    8. if ($result = mysqli_query($con, $sql))
    9. {
    10. $resultArray = array();
    11. $posts = array();
    12. while($row = $result->fetch_assoc())
    13. {
    14. $posts = array("beschreibung" => utf8_decode(htmlentities($row["beschreibung"])));
    15. array_push($resultArray, $posts);
    16. }
    17. echo json_encode ($resultArray);
    18. }
    19. ?>
    Alles anzeigen
    Wo ist mein Fehler ? Im Browser stimmts in Xcode nicht ? :(
  • Hmm, habe zwar schon einiges mit JSON-RPC gemacht, aber nix mit PHP od. Obj-C. Dem Browser würde ich nicht vertrauen. Wie sie es aus, wenn Du dir den Quelltext der Seite anschaust? Du kannst auch

    Quellcode

    1. curl http://localhost:8888/loadProject.php
    im Terminal mal aufrufen und schauen was die Seite zurückgibt.
  • Wie ich das sehe, ist dein String, der über die Leitung geht, in ISO-8859-1 codiert. Du brauchst aber UTF-8. Wenn deine Datenbank sowieso schon alles in UTF-8 abgelegt hat, dann wieso dann nicht direkt als UTF-8 String rausgeben? Wenn Du das clientseitig lösen möchtest, dann musst Du halt noch nach UTF-8 an der passende Stelle kodieren. Aber hin- und herkodieren? - Was bringt das?
  • Das Problem was ich hab ist einfach, dass sobald umlaute dabei sind das mir diese in Xcode nicht angezeigt werden.

    Der Browser hat es nur ausgegeben weil ich als header HTML/text hatte.

    aber wenn ich deinen Befehl ausführe. also curl .... dann bekomm ich die Umlaute nicht richtig dargestellt. Ich weiß nicht was ich im PHP file noch ändern soll damit die Ausgabe auch korrekt ist
  • Meinst du so ?

    Quellcode

    1. $con=mysqli_connect("localhost","test","","test");
    2. if (mysqli_connect_error($con))
    3. {
    4. echo "Failed to connect to MySQL: " . mysqli_connect_error();
    5. }
    6. $sql = "SELECT beschreibung FROM Picture Where id = 0";
    7. if ($result = mysqli_query($con, $sql))
    8. {
    9. $resultArray = array();
    10. $posts = array();
    11. while($row = $result->fetch_assoc())
    12. {
    13. $posts = array("beschreibung" => $row["beschreibung"]);
    14. array_push($resultArray, $posts);
    15. }
    16. echo json_encode ($resultArray);
    17. }
    Alles anzeigen

    Dann wird mir garnichts ausgegeben
  • Quellcode

    1. $posts = array("beschreibung" => utf8_encode(htmlentities($row["beschreibung"]))
    Im Browser wird mir --> FÜR ausgegeben
    in Xcode Wieder FFÜR

    :(

    Hier der Ausschnit aus der DB
    Dateien
  • Nee Xcode gibt mir keine Umlaute aus.

    Wenn keine im Text vorhanden sind, habe ich auch kein Problem. Was kann ich noch machen ?

    muss ich im Header was ändern ?

    Quellcode

    1. header('Content-Type: text/html; charset=utf-8');
    2. $con=mysqli_connect("localhost","test","","test");
    3. mysqli_query($con, "SET NAMES 'utf8'");
    4. if (mysqli_connect_error($con))
    5. {
    6. echo "Failed to connect to MySQL: " . mysqli_connect_error();
    7. }
    8. $sql = "SELECT beschreibung FROM Picture Where id = 0";
    9. if ($result = mysqli_query($con, $sql))
    10. {
    11. $resultArray = array();
    12. $posts = array();
    13. while($row = $result->fetch_assoc())
    14. {
    15. $posts = array("beschreibung" => utf8_decode(htmlentities($row["beschreibung"])));
    16. array_push($resultArray, $posts);
    17. }
    18. echo json_encode ($resultArray);
    19. }
    Alles anzeigen


    Und in Xcode: (Ausschnitt)

    Quellcode

    1. NSURL * url_Game = [NSURL URLWithString:@"http://localhost:8888/loadProject.php"];
    2. NSURLSessionTask *task_Game = [[NSURLSession sharedSession] dataTaskWithURL:url_Game completionHandler: ^(NSData *data_Game, NSURLResponse *response, NSError *error)
    3. {
    4. if (data_Game) {
    5. cityarray = [[NSMutableArray alloc] init];
    6. NSMutableArray *response = [NSJSONSerialization JSONObjectWithData:data_Game options:NSJSONReadingMutableContainers error:nil];
    7. [cityarray addObjectsFromArray:response];
    8. NSLog(@"%@", cityarray);
    9. }}
    Alles anzeigen
    So sieht mein Code aus
  • Meinst du so ?

    Quellcode

    1. $con=mysqli_connect("localhost","test","","test");
    2. if (mysqli_connect_error($con))
    3. {
    4. echo "Failed to connect to MySQL: " . mysqli_connect_error();
    5. }
    6. $sql = "SELECT beschreibung FROM Picture Where id = 0";
    7. if ($result = mysqli_query($con, $sql))
    8. {
    9. $resultArray = array();
    10. $posts = array();
    11. while($row = $result->fetch_assoc())
    12. {
    13. $posts = array("beschreibung" => utf8_decode($row["beschreibung"]));
    14. array_push($resultArray, $posts);
    15. }
    16. echo json_encode ($resultArray);
    17. }
    Alles anzeigen
    Dann wird mir in Xcode der Umlaut auch nicht dargestellt.
  • Kann das eigentlich sein, dass das schon falsch in der DB abgelegt ist und

    Quellcode

    1. $posts = array("beschreibung" => utf8_decode($row["beschreibung"]));


    das ist doch schon wieder ein ISO-String.

    Du kannst auch mal sowas probieren:


    Quellcode

    1. $posts = array("beschrääbung" => utf8_encode($row["beschreibung"]));