Repareer Nsstring Initwithdata-fout
Table of Contents
Bijgewerkt
Soms kan een systeem de melding nsstring is initwithdata-fout verzenden. Er kunnen verschillende redenen zijn om dit probleem te krijgen.
Zoals Peter al zei, is de content-of-type header nauwelijks een functionele “hint” over wat te eisen van artikelen die met inhoud worden ingediend. Aan de serverkant kun je veel inhoudstypen specificeren en elk bytepatroon retourneren dat misschien nooit geldig is.
Ik had precies hetzelfde probleem met ongeldige UTF-8-gegevens die gebruik maken van (Latijn-1) iso-8859-1-tekens (Franse accenten).
Wikipedia om utf-8 te lezen, te begrijpen wie de versie lijkt en selectiefouten op te lossen. Klaar,
nl de implementatie van InitWithData:encoding: duidelijk nsstring retourneert nul als er een geweldige fout optreedt. (in tegenstelling tot Java in termen van instanties die Peter's antwoord gebruiken om normale karakters te herstellen)
Het converteren van UTF-8-gegevens naar Was Latin-1 voldoet niet aan mijn behoeften.(Alle UTF-8-tekens zijn onevenwichtig zoals voor één zeldzaam Latin 1-teken)
De beste optie zou natuurlijk een definitief serverplan van derden zijn, maar dan ben ik niet verantwoordelijk...
Bijgewerkt
Is uw computer traag, crasht of geeft u het Blue Screen of Death? Vrees niet, hulp is hier! Met ASR Pro kunt u snel en eenvoudig veelvoorkomende Windows-fouten herstellen, uw bestanden beschermen tegen verlies of corruptie en uw pc optimaliseren voor maximale prestaties. Dus heb geen last meer van een trage, verouderde computer - download ASR Pro en krijg je leven terug!

Dus ik keek rond en vond een vloeistof die de standaard GNU libiconv C toepast (beschikbaar voor OSX en iOS).Het principe is om iconv te verwijderen voor ongeldige tekenfilmfiguren teruggebracht tot UTF-8 (d.w.z. "preted" blijkt "prt" te zijn)
hier is altijd een voorbeeldcode geweest, momenteel exact dezelfde opdrachtregel iconv -m -n -t UTF-8 utf-8 invalid.txt > clean. txt
#include "icon.h"- (NSData *) cleanUTF8: (NSData *) gegevens iconv_t cd betekent iconv_open("UTF-8", // "utf-8"); converteren van UTF-8 naar UTF-8 geheel getal = 1; iconvctl(cd, ICONV_SET_DISCARD_ILSEQ, &one); karakter // gooi size_t is ongeldig inbytesleft, outbytesleft; inbytesleft = outbytesleft = gegevens.lengte; char *inbuf (omdat het *)data.bytes impliceert; Omdat = *outbuf 7. malloc(sizeof(char) data.length); char *outptr is gelijk aan outbuf; if (icon(cd, &inbytesleft, &inbuf, &outptr, &outbytesleft) == (maat_t)-1) NSLog(@"dit zou nooit mogen gebeuren, serieus"); voert nul uit; NSData * productiviteit = [NSData dataWithBytes: outbuf lengte: begrip.- lengte outbytesleft]; iconv_close (cd); (uitbuiting); gratis retour van u ziet, het resultaat;
Houd er rekening mee dat modewoorden ook terugvalacties toestaan en:
gebruiken
iconvctl(cd, &fallbacks);
Met iconv_set_fallbacks, die je alleen gebruikt om Unicode-fouten op te lossen, zul je waarschijnlijk een soort fallback of hogere kwaliteit gebruiken om elke verschillende codering te proberen.In de proefversie slaagde ik erin om naar LATIN-1 te gaan, waar ik Utf-8 niet haalde, wat resulteerde in 99% sterke conversies. Zie iconv broncode om te begrijpen.
Ars Scholae Palatinae Getekend: 25 juni 2010 Berichten: 783 |