Ich möchte eine C ++ - Zeichenkette umwandeln NSString
zur Verwendung in iOS-App.
Aber manchmal ist das Ergebnis für C ++ - String mit einem merkwürdigen Suffixformat gleich null.
Zum Beispiel: eine C ++ - Zeichenfolge ", aber tatsächlich stellte sich heraus, dass Sie es sind! $ 211 /" wird nach der Konvertierung in nil produzieren NSString
.
mainFile.open(filePath, std::ios::binary);
mainFile.seekg(current_offset);
char buffer[size];
mainFile.read(buffer, sizeof buffer);
string tempString = string(buffer)
NSString *testString = [NSString stringWithCString:tempString.c_str() encoding:NSUTF8StringEncoding];
Wann cout << tempString
Ich lese den String-Inhalt immer noch mit einem seltsamen Code-Suffix, aber er erzeugt nach der Konvertierung nichts NSString
Weiß jemand, wie man das repariert?
Antworten:
1 für die Antwort № 1Warum sollte man sich überhaupt mit dem C ++ - Teil beschäftigen?
NSString *filePath = @"/path/to/some/file.txt";
NSFileHandle *input = [NSFileHandle fileHandleForReadingAtPath:filePath];
[input seekToOffset:current_offset];
NSData *bytes = [input readDataOfLength:size];
if (bytes)
{
NSString *str = [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding];
}
else
{
NSLog(@"Unable to read from file");
}
Ob str
ist nil
Dann bedeutet dies, dass die Daten nicht als UTF8 kodiert sind. Sie müssen also herausfinden, in welcher Kodierung sich Ihre Daten tatsächlich befinden. Wenn sie von einem Windows-Computer stammen, versuchen Sie es NSWindowsCP1251StringEncoding
oder NSISOLatin1StringEncoding
.
0 für die Antwort № 2
Der Code gibt die Kodierung an NSUTF8StringEncoding
Der String hat jedoch einen Byte-Wert, der kein gültiges UTF-8-Zeichen ist. Wählen Sie eine Kodierung aus, die der Zeichenfolge entspricht.
Versuchen Sie eine Kodierung wie NSISOLatin1StringEncoding
:
8-Bit-ISO-Latin-1-Kodierung.
NSMacOSRomanStringEncoding
Möglicherweise ist eine andere Kodierung zu berücksichtigen, wenn Sie aus einer Mac-Umgebung stammen.