/ / UTF8-Hexadezimalzeichenfolge in regulären UTF8-codierten NSString konvertieren - iphone, ios, objectiv-c, utf-8, nsstring

Konvertieren von UTF8 Hex-Zeichenfolge in reguläre UTF8-codierte NSString - iPhone, iOS, Ziel-C, UTF-8, NSString

Ich erhalte utf-8 (hex): Hc3b8rt zurück von einem Server anstelle der Zeichenfolge "Hørt". Ich muss diese Antwort auf reguläres utf-8 konvertieren.

Was ich versucht habe:

NSString *string = [dict objectForKey:@"suggest"];

const char *cfilename=[string UTF8String];

NSString *str = [NSString stringWithUTF8String:cfilename];

Vielen Dank für Ihre Zeit!

Antworten:

1 für die Antwort № 1

Es gibt keine Möglichkeit, dies zu dekodieren. Wie @JoachimIsaksson in den obigen Kommentaren feststellte, können Sie feststellen, ob "abba" genau "abba" oder zwei Unicode-Zeichen ist.


1 für die Antwort № 2

Verwenden Sie String-Codierung, NSISOLatin1StringEncoding

 - (id)initWithCString:(const char *)nullTerminatedCString
encoding:(NSStringEncoding)encoding

Oder kurz

NSString *str = [NSString stringWithCString:cfilename
encoding:NSISOLatin1StringEncoding];

Nach Kommentaren bearbeiten:

Das ist irgendwie seltsam. Nach Ihren Kommentaren habe ich einige Experimente durchgeführt und merkwürdiges Verhalten festgestellt.

- (void) testStringEncodingOK {
NSString *string = @"hu00c3u00a5r";
const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding];
NSString *cs = [NSString stringWithUTF8String:cfilename];
NSLog(@"String: %@", cs);
}

Diese Ausgabe: hår

Aber wenn Sie das U in Kapital erhalten, nicht u, dann ersetzte ich sie zu u. Und dann hat es nicht geklappt. Scheine das,

- (void) testStringEncodingConfused {
NSString *string = @"h\U00c3\U00a5r";
string = [string stringByReplacingOccurrencesOfString:@"\U" withString:@"\u"];
NSLog(@"Original string:%@", string); // now string = @"hu00c3u00a5r"
const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding];
NSString *cs = [NSString stringWithUTF8String:cfilename];
NSLog(@"String: %@", cs);
}

Die Ausgabe ist hu00c3u00a5r


0 für die Antwort № 3

Verwenden Sie den folgenden Code.

  const char *ch = [yourstring cStringUsingEncoding:NSISOLatin1StringEncoding];

yourstring = [[NSString alloc]initWithCString:ch encoding:NSUTF8StringEncoding];

NSLog(@"%@",yourstring);

Lass mich wissen, ob es funktioniert oder nicht ...

Happy Coding ....


0 für die Antwort № 4

benutze diesen Code

NSString *string = [dict objectForKey:@"suggest"];

const char *cfilename=[string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSString *str = [NSString stringWithUTF8String:cfilename];

und sagen, ob es funktioniert oder nicht.