簡體   English   中英

將字符串轉換為NSString時出現問題

[英]Issue when convert string to NSString

我想將C ++字符串轉換為NSString以在iOS應用中使用。

但是對於帶有奇怪后綴格式的C ++字符串,有時結果為nil。

例如:C ++字符串“但實際上原來是您!$ \\ 211 /”在轉換為NSString之后將產生nil。

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];

cout << tempString我仍然讀取帶有奇怪代碼后綴的字符串內容,但在轉換為NSString后會產生nil

有人知道怎么修這個東西嗎?

為什么還要打擾C ++部分呢?

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");
}

如果strnil ,則意味着該數據未編碼為UTF8,因此您需要查找數據的實際編碼方式。如果它來自Windows計算機,請嘗試NSWindowsCP1251StringEncodingNSISOLatin1StringEncoding

該代碼指定了編碼NSUTF8StringEncoding但是該字符串的字節值不是有效的UTF-8字符。 選擇與字符串匹配的編碼。

嘗試使用NSISOLatin1StringEncoding的編碼:

8位ISO Latin 1編碼。

如果您來自Mac環境,則NSMacOSRomanStringEncoding可能是要考慮的另一種編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM