2015-09-17 41 views
0

我想將C++字符串轉換爲NSString以在iOS應用程序中使用。將字符串轉換爲NSString時發出的問題

但是有時候結果對於奇怪的後綴格式的C++字符串是零的。

例如:一個C++字符串「但實際上它原來是你!$ \ 211 /」在轉換爲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]; 

cout << tempString我還是讀取字符串內容與一個奇怪的代號後綴,但它產生的零後轉換爲NSString

任何人都知道如何解決這一問題?

+0

您如何期待我們告訴您如何修復您尚未與我們分享的代碼?我們不知道你是如何轉換它或代碼在做什麼的。請編輯您的帖子並添加[MCVE(最小,完整,可驗證示例)](http://stackoverflow.com/help/mcve)。 –

+0

每個字符串都有數字代碼,最後會產生nil。在我的例子中,奇怪的代碼是:\ 211我從二進制文件中讀取原始字符串。 – abelhoang

+0

哦FFS!您的_源代碼_。將您的_源代碼_減少到一個MCVE並將其包含在您的帖子中。告訴我們什麼字符代碼插入你的麻煩是在這一點上是無用的。 –

回答

0

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

嘗試的編碼如NSISOLatin1StringEncoding

8位ISO拉丁1個編碼。

NSMacOSRomanStringEncoding如果您是來自Mac環境,可能是另一種編碼方式。

+0

謝謝。在隱藏它之前是否有辦法去除無效字符?因爲我不能使用NSISOLatin1StringEncoding,它會產生混雜着可讀文本的不可讀文本。 – abelhoang

+0

當然,刪除所有設置了高位的字符,他們將會在'NSUTF8StringEncoding'中確定。但是你會失去文字。嘗試所有的編碼,也許其中一個將工作。我剛剛通過這個轉換Fortran和C++代碼,其中有一個Mac版權符號。您也可以使用BBEdit和「Zap Gremlins」命令。 – zaph

1

爲什麼要用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

+0

謝謝,我使用C++編寫一個用於Android的庫。 lib讀了幾十萬條記錄,所以我認爲C++更快。 – abelhoang

相關問題