这个很奇怪。希望我会问正确的问题:
我正在使用md5方法创建校验和值,然后将其写入文件。然后我用这个读取文件:
NSString * id_From_File = [[NSString alloc]
initWithContentsOfFile:path_to_ID
encoding:NSUTF8StringEncoding
error:&error];
结果放在NSString中,当我打印时给我非常奇怪的行为。例如,当我使用它来打印时,
id_with_date = [NSString stringWithFormat:@" %@ %@", dateString, id_From_File];
如果dateString放在第一个参数中,它将打印两个字符串,而在第二个参数中放置id_From_File。如果我切换它们(我需要做),只有id_From_File显示。
编辑1:开关示例:
id_with_date = [NSString stringWithFormat:@" %@ %@", id_From_File, dateString];
我坚信这与id_From_File字符串的编码有关。
任何知识!?
谢谢,
答案 0 :(得分:10)
NSString实际上应该能够将空字符识别为文件结尾。您是否尝试使用其他方法加载字符串。我会选择这一个:
- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error
此方法会自动检测文件的编码,而不是使用固定的编码对其进行解码。
答案 1 :(得分:0)
我已经解决了这个问题!
这与某些字符串使用空字符来标识结尾的事实有关。请允许我解释一下:
假设您有两个字符串,一个字符串末尾为空字符,另一个字符串不为。根据您订购它们的方式,连接时它们的读取方式会有所不同。
"somestring(null char)" + "another string"
以上,在某些代码中,将会读取
somestring
如果地点被切换
"another string" + "somestring(null char)"
然后你得到
"another string somestring"
我解决这个问题的简单方法就是创建一个带有“some string”子字符串的新字符串,它很容易摆脱导致该bug的最后一个字符。
我希望这是明确和有用的!