Einige utf-8-Zeichenketten base64 kodiert php kann nicht entschlüsselt werden mit iOS base64-Bibliothek?
Hier ist ein Teil der chinesischen utf-8 codiert ist, die von PHP auf der server-Seite, aber wenn ich Sie entschlüsseln mit iOS, gibt Sie null zurück.
Ich habe auch versucht diese online-tool, wo der text decodiert werden kann auch.
NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:content options:0];
content = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
5aW96ZuF77yM5ZKx5p2l5LiA5L+X55qE77yM5pS56Ieq5Lic5Y2X6KW/5YyX6aOO44CCCuS4juS9oOebuOmAou+8jOWFqOaYr+acuue8mOW3p+WQiOOAguWPr+Wtpui1t+adpeWNtOW/g+aGlOaCtOOAggrmgLvmmK/ovpPkuoborqnlho3ljrvlrabvvIzlrabkuobo
Hier ist der test-code für debug-dieses Problem mit xcode:
NSString * = @"5aW96ZuF77yM5ZKx5p2l5LiA5L+X55qE77yM5pS56Ieq5Lic5Y2X6KW/5YyX6aOO44CCCuS4juS9oOebuOmAou+8jOWFqOaYr+acuue8mOW3p+WQiOOAguWPr+Wtpui1t+adpeWNtOW/g+aGlOaCtOOAggrmgLvmmK/ovpPkuoborqnlho3ljrvlrabvvIzlrabkuobo";
//
NSData *decodedData = [[NSData alloc] initWithBase64EncodedString: options:0];
NSString *content = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding] ;
NSLog(content);
- Haben Sie überprüft, dass
decodedData
hat die erwarteten Daten? Vielleicht ist IhrinitWithBase64EncodedString
ist nicht der Umgang mit diesem besonderen base64-codierte Zeichenfolge ordnungsgemäß. - Kann mir jemand diese Frage beantworten zu stackoverflow.com/questions/39657434/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre überarbeitete Frage-features, die eine base64-Zeichenfolge:
Dieser string hat eine Länge, die ein Vielfaches von vier bytes, also das fehlen der
=
/==
terminator am Ende ist nicht das problem. Und in der TatinitWithBase64EncodedString
decodiert erfolgreich:Das Problem hier ist, dass dies scheint nicht eine gültige UTF8-string. In der Tat, wenn ich es durch die http://base64decode.net Website, die Sie auf die in Ihrer ursprünglichen Frage, es ist auch nicht in der Lage zu konvertieren, um ein UTF8-string (ich Bemerke, dass Ihre Bildschirm-Schnappschüsse sind mit einem anderen Konverter-web-site). Bei mir lief es durch ein weiterer Konverter, es konvertiert werden, was es sein könnte, aber dann beschwerten sich über den Charakter folgenden
学了
(die zufällig das Zeichen, in dem Sie Ihre base64-Konverter web-site gestoppt, auch).Durch die Art und Weise, die UTF8-Darstellung der
了
iste4 ba 86
. Und Sie werden sehen, dass in der Nähe des Ende der hex-Darstellung des base-64-Zeichenfolge, gefolgt von einem mehr-byte, diee8
. Die Sache ist die,e8
, von selbst, ist nicht ein gültiges UTF8-Zeichen. Es sieht fast aus, sieht aus wie Sie nahm einen base64-kodierten string und schnappte sich einfach die ersten 200 bytes, unabhängig davon, ob das ergab im Schnitt der UTF8-Zeichen in der Mitte oder nicht.Die ursprüngliche Frage vorgestellt, die eine base64-Zeichenfolge:
Nicht gültig ist base64. Es sollte ein Vielfaches von vier bytes Länge, aber das ist nur 163 Zeichen ist, fehlt ein Zeichen. Entweder Ihr server nicht ordnungsgemäß beendet die base64-string, oder es abgeschnitten aus irgendeinem Grund.
Zum Beispiel, wenn ich einen
=
um es zu bekommen bis zu 164 Zeichen, bekomme ich eine gültige base64-string:Hinzufügen der
=
wäre die richtige Lösung, wenn der server einfach vernachlässigt zu beenden, die die base64-string richtig. Doch, dass kann sein, base64-dekodiert zu:Ist, dass das, was Sie erwartet hatten?
Sollten Sie vielleicht einen Blick auf Ihre base64-routine auf deinem server? Oder wenn es immer abgeschnitten, betrachten, wie Sie sind, es zu empfangen und vergleichen Sie die server-original-base64-string der Länge zu, was Sie hier haben.
Weitere Informationen über das hinzufügen
=
oder==
am Ende einer base-64-codierte Zeichenfolge, siehe die base64-wikipedia-Seite.@Rob Recht.
Aktivieren Sie dieses NSData nicht akzeptieren gültige base64-codierte string
Aber im Falle, wenn Ihr server nicht wieder gültige JSON mit "=" oder "==", dann musst du für die Verwendung von externen Methoden durchführen base64decode. Diese Methoden decodiert werden können, selbst wenn base64string nicht " = " - symbol am Ende.
=
oder==
selbst. Hoffentlich kann er nur die Korrektur der server-Seite, sondern als Kodierung um ihn herum.=
/==
- Zeichen am Ende). DaherinitWithBase64EncodedString
dekodiert es in Ordnung. Es ist nun der UTF-8-string-Konvertierung welche nicht. Und als ich versuchte Ihre base64-Zeichenfolge, die auf verschiedenen base64-Konvertierung Websites, Sie hatte auch Probleme mit dem umwandeln in einen string.