Falsche NSStringEncoding Wert 0x0000 erkannt (mit ASIHTTPRequest)
Ich bin mit ASIHTTPRequst in meiner Anwendung, und ich habe einige Probleme, aber nur auf bestimmten Geräten. In einigen Fällen bekomme ich die folgende Fehlermeldung:
"
Falsche NSStringEncoding Wert 0x0000 erkannt. Vorausgesetzt, NSASCIIStringEncoding. Aufhören wird diese Kompatibilität mapping-Verhalten in die nahe Zukunft
"
Ich habe nur begrenzte Möglichkeiten, um dieses zu testen, weil es funktioniert auf allen meinen internen test-Geräte, aber das problem immer noch Auftritt, auf eine oder mehrere meiner Kunden test-Handys. Es kann auch der Fall, wenn sich das Telefon mit dem Mobilfunknetz verbunden, als es scheint zu funktionieren über WLAN.
Weiß jemand, was könnte das problem verursachen? Ich sehe, es gibt ähnliche Fragen, aber mein code sieht wie Ihr beide richtig von den anderen Fragen beantwortet und das ASIHTTPRequest-Website.
Bearbeiten
Wenn der Fehler keine Antwort vom server empfangen wird, sodass der Benutzer bleibt am register/login.
urlEncodeValue:
- (NSString *)urlEncodeValue:(NSString *)str
{
NSString *result = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
return [result autorelease];
}
ASIHTTPRequest-code-snippet:
NSString *encodedUrlAdress = [NSString stringWithFormat:@"%@user/register/%@/%@/%@/%d/%@/%@/%@/%@",
kUserServerAddress,
[self urlEncodeValue:_firstName],
[self urlEncodeValue:_lastName],
[self urlEncodeValue:_phoneNumber],
_sex,
[self urlEncodeValue:_birthDate],
[self urlEncodeValue:_address],
[self urlEncodeValue:_postalNumber]];
NSLog(@"encodedUrlAdress: %@", encodedUrlAdress);
NSURL *url = [NSURL URLWithString:encodedUrlAdress];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
//do stuff
}
danke Tim, seine includded jetzt
Sehr gute Frage, Madoc
Sieht alles gut hier soweit ich sehen kann: Wie sicher sind Sie, dass das problem in diesem Teil des Codes? Sie sagen, dass keine Antwort vom server empfangen wird. Haben Sie sichergestellt, dass die Nachricht entweder gesendet oder nicht gesendet, um dem server?
ich habe mich durch den code Schritt für Schritt und die Fehlermeldung kommt, wenn die Anfrage mal an der Linie: ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; EDIT: Jedoch nur kurzzeitig auf einem der test-Handys für meine Kunden, nicht alle von unseren Handys haben dieses problem, also es ist sehr seltsam:\ ich kann nicht reproduzieren Sie das problem jetzt auf unsere Handys
InformationsquelleAutor Madoc | 2011-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kopier meine Antwort aus https://stackoverflow.com/q/8251175/918764 - sind Sie wahrscheinlich immer diese Meldung, weil Sie hier aufrufen
getResponseString
auf eine Anfrage, die fehlgeschlagen ist. Sie sollten sicherstellen, dass Sie überprüfen, wenn Sie eine Antwort vor dem Aufruf dieser: eine Möglichkeit, die ich gefunden habe, um zu testen, für die Gesamt-Anfrage-Fehler (z.B. Netzwerk - /server-down), ist zu prüfen:Dies vor allem passiert, wenn Sie anrufen
[asiHttpRequest getResponseString]
bevor eine gültige Antwort zurückgegeben wurde und der Antrag Codierung festgelegt wurde (d.h. es konnte keine Verbindung zum server).Der einfachste Weg zur Umgehung dieser Warnung durch Bearbeiten der
ASIHTTPRequest
Klasse, entfernen Sie die@synthesize responseEncoding
und das hinzufügen eines einfachen benutzerdefinierten get - /Set-so können Sie wieder die Standard-Codierung, wenn die response-encoding nicht gesetzt werden:Gibt es auch ein spezifischer workaround für die
getResponseString
Methode, die ich denke, ist der einzige Ort, verwendet die Codierung ohne Prüfung für eine Wert - da die Codierung sollte festgelegt werden, für alle nicht-null-Länge-Antwort:Gerne helfen! Wir haben noch ein paar andere änderungen wie diese, um das ASIHTTPRequest-code, den wir verwenden, so dass ich denke ich ll machen ein GitHub fork bald und Begehen Sie dort alles für das Größere Gute.
Ja, das klingt wie eine gute Idee 🙂
Wir landeten ablegen ASIHTTPRequest, weil es einige kritische Fehler im Umgang mit der Authentifizierung von Proxys in der wildnis; Verpackung NSURLRequest/NSURLConnection direkt gibt uns eine bessere Leistung und mehr Flexibilität für den Umgang mit benutzerdefinierten SSL-Validierung. Ihre Laufleistung kann variieren.
Gute Antwort rvalue. Bitte teilen Sie den link des GitHub-fork. So können wir den code erhalten haben, die Sie geändert haben, für ASIHTTPRequest
InformationsquelleAutor rvalue