Hinweis: Es -stringByAddingPercentEscapesUsingEncodingwird nicht die richtige Codierung erzeugt. In diesem Fall wird nichts codiert, das dieselbe Zeichenfolge zurückgibt.
Beachten Sie auch, dass Sie die -stringByAddingPercentEscapesUsingEncodingMethode von NSString verwenden können.
Mike Weller
2
Ah ja, jetzt erinnere ich mich an das funky stringByAddingPercentEscapesUsingEncodingVerhalten. Es codiert nur '&' und '=' oder so etwas Lächerliches.
Mike Weller
2
Laut RFC1738 müssten Sie auch zusätzliche Zeichen codieren. Obwohl dies die Frage des OP beantwortet, ist es als universeller URL-Encoder nur begrenzt nützlich. Zum Beispiel werden nicht alphanumerische Zeichen wie ein deutscher Umlaut nicht behandelt.
Alex Nauda
3
Dies funktioniert nicht (für iOS 7 Teil). Dies konvertiert & nicht in% 26.
coolcool1994
1
Erstellen Sie den Zeichensatz, den Sie benötigen, aus einem NSStringmit characterSetWithCharactersInString, nehmen Sie die Umkehrung mit invertedSetund verwenden Sie diesen mit stringByAddingPercentEncodingWithAllowedCharacters. Ein Beispiel finden Sie in dieser SO-Antwort .
Wenn mir jemand sagen würde, wer diesen Code geschrieben hat, würde ich ihn wirklich schätzen. Grundsätzlich hat er eine Erklärung, warum diese codierte Zeichenfolge genau so decodiert, wie sie es wünscht.
Ich habe seine Lösung ein wenig modifiziert. Ich möchte, dass Leerzeichen mit% 20 und nicht mit + dargestellt werden. Das ist alles.
@yuchaozh Dies ist eine Funktion, die Sie in eine Kategorie von NSString einfügen. Self ist also NSStirng und [self UTF8String] gibt vermutlich seine Zeichenfolge im UTF8-Format zurück.
Geben Sie encodedString und url frei. In diesem Code geht es um Codierungsparameter. Um die gesamte Adresse zu codieren, übergeben Sie eine Zeichenfolge anstelle von "Parameter".
Zahi
Dies funktionierte für mich ... verschlüsselte sogar den & Charakter, mit dem ich Probleme hatte.
Виктор Иванов
3
Dies kann in Objective C ARC funktionieren. Verwenden Sie CFBridgingRelease, um ein Objekt im Core Foundation-Stil als Objective-C-Objekt umzuwandeln und das Eigentum an dem Objekt auf ARC zu übertragen . Siehe Funktion CFBridgingRelease hier.
Folgendes benutze ich. Beachten Sie, dass Sie die @autoreleasepoolFunktion verwenden müssen, da das Programm sonst abstürzen oder die IDE blockieren kann. Ich musste meine IDE dreimal neu starten, bis ich das Update erkannte. Es scheint, dass dieser Code ARC-kompatibel ist.
Diese Frage wurde oft gestellt und viele Antworten gegeben, aber leider sind alle ausgewählten (und einige andere vorgeschlagenen) falsch.
Hier ist die Testzeichenfolge, die ich verwendet habe: This is my 123+ test & test2. Got it?!
Google implementiert dies in seiner Google Toolbox für Mac . Das ist also ein guter Ort, um zu zeigen, wie sie es machen. Eine weitere Option besteht darin, die Toolbox einzuschließen und ihre Implementierung zu verwenden.
Überprüfen Sie die Implementierung hier . (Was genau darauf ankommt, was die Leute hier gepostet haben).
ùÕ9y^VêÏÊEØ®.ú/V÷ÅÖêú2Èh~
- keine der folgenden Lösungen scheint dies zu beheben!Antworten:
Den gewünschten Charakteren zu entkommen, ist etwas mehr Arbeit.
Beispielcode
NSLog-Ausgabe:
Die folgenden nützlichen URL-Codierungszeichensätze sind:
Erstellen eines Zeichensatzes, der alle oben genannten Elemente kombiniert:
Erstellen einer Base64
Im Fall des Base64-Zeichensatzes:
Hinweis:
stringByAddingPercentEncodingWithAllowedCharacters
Codiert auch UTF-8-Zeichen, die codiert werden müssen.Verwenden von Core Foundation ohne ARC:
Hinweis: Es
-stringByAddingPercentEscapesUsingEncoding
wird nicht die richtige Codierung erzeugt. In diesem Fall wird nichts codiert, das dieselbe Zeichenfolge zurückgibt.stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
codiert 14 Zeichen:testString:
encodedString:
Hinweis: Überlegen Sie, ob dieser Zeichensatz Ihren Anforderungen entspricht, und ändern Sie ihn nicht nach Bedarf.
Zu codierende RFC 3986-Zeichen (% hinzugefügt, da es sich um das Codierungspräfixzeichen handelt):
Einige "nicht reservierte Zeichen" werden zusätzlich codiert:
quelle
-stringByAddingPercentEscapesUsingEncoding
Methode von NSString verwenden können.stringByAddingPercentEscapesUsingEncoding
Verhalten. Es codiert nur '&' und '=' oder so etwas Lächerliches.NSString
mitcharacterSetWithCharactersInString
, nehmen Sie die Umkehrung mitinvertedSet
und verwenden Sie diesen mitstringByAddingPercentEncodingWithAllowedCharacters
. Ein Beispiel finden Sie in dieser SO-Antwort .Es heißt URL-Codierung . Mehr hier .
quelle
CFURLCreateStringByAddingPercentEscapes()
ist veraltet. Verwenden Sie[NSString stringByAddingPercentEncodingWithAllowedCharacters:]
stattdessen.Das ist nicht meine Lösung. Jemand anderes hat in stackoverflow geschrieben, aber ich habe vergessen wie.
Irgendwie funktioniert diese Lösung "gut". Es behandelt diakritische, chinesische Zeichen und so ziemlich alles andere.
Wenn mir jemand sagen würde, wer diesen Code geschrieben hat, würde ich ihn wirklich schätzen. Grundsätzlich hat er eine Erklärung, warum diese codierte Zeichenfolge genau so decodiert, wie sie es wünscht.
Ich habe seine Lösung ein wenig modifiziert. Ich möchte, dass Leerzeichen mit% 20 und nicht mit + dargestellt werden. Das ist alles.
quelle
quelle
Dies kann in Objective C ARC funktionieren. Verwenden Sie CFBridgingRelease, um ein Objekt im Core Foundation-Stil als Objective-C-Objekt umzuwandeln und das Eigentum an dem Objekt auf ARC zu übertragen . Siehe Funktion CFBridgingRelease hier.
quelle
Schnelles iOS:
Nur zur Information: Ich habe dies verwendet:
quelle
Sie müssen sich freigeben oder automatisch freigeben
str
.quelle
Folgendes benutze ich. Beachten Sie, dass Sie die
@autoreleasepool
Funktion verwenden müssen, da das Programm sonst abstürzen oder die IDE blockieren kann. Ich musste meine IDE dreimal neu starten, bis ich das Update erkannte. Es scheint, dass dieser Code ARC-kompatibel ist.Diese Frage wurde oft gestellt und viele Antworten gegeben, aber leider sind alle ausgewählten (und einige andere vorgeschlagenen) falsch.
Hier ist die Testzeichenfolge, die ich verwendet habe:
This is my 123+ test & test2. Got it?!
Dies sind meine Objective C ++ - Klassenmethoden:
quelle
Google implementiert dies in seiner Google Toolbox für Mac . Das ist also ein guter Ort, um zu zeigen, wie sie es machen. Eine weitere Option besteht darin, die Toolbox einzuschließen und ihre Implementierung zu verwenden.
Überprüfen Sie die Implementierung hier . (Was genau darauf ankommt, was die Leute hier gepostet haben).
quelle
So mache ich das schnell.
quelle
// Verwenden Sie die NSString-Instanzmethode wie folgt:
Denken Sie daran, dass Sie nur für Ihren Parameterwert codieren oder decodieren sollten, nicht für alle von Ihnen angeforderten URLs.
quelle
quelle