繁体   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