我有一个文件,其中许多行以“\ n”分隔。其中一条线是:
Christian Grundekjøn
除非我删除该行,否则无法读取该文件。我使用以下代码逐行阅读:
for (NSString *line in [[NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:NULL] componentsSeparatedByString:@"\n"])
如果我不删除该行,代码甚至根本不会进入for循环。什么都没看过。如何处理非英文字母?
答案 0 :(得分:2)
如果要从iOS中生成文本文件,则需要确保使用NSUTF8StringEncoding对其进行编码。但鉴于您正在报告的问题,我怀疑您可能从其他来源提取数据并且该来源未将文本编码为UTF8。如果是这种情况,您可以在应用程序外修复问题,但将源文件转换为UTF8。
如果您不知道使用了什么编码,例如因为用户提供了该文件,iOS可以尝试为您猜测。我成功使用的模式是首先尝试使用UTF8编码获取字符串,例如使用您使用的相同方法。假设您编写了一个传递文件名的方法,以获取类似于以下内容的字符串:
- (NSString*) stringFromFile: (NSString*) filePath;
{
NSError* error = nil;
NSString* stringFromFile = [NSString stringWithContentsOfFile: fileName
encoding: NSUTF8StringEncoding
error: &error];
if (stringFromFile) return stringFromFile; // success
NSLog(@"String is not UTF8 encoded. Error: %@", [error localizedDescription]);
NSStringEncoding encoding = 0;
NSError* usedEncodingError = nil;
NSString* stringFromFile = [NSString stringWithContentsOfFile: path
usedEncoding: &encoding
error: &usedEncodingError];
if (stringFromFile)
{
NSLog(@"Retrieved string using an alternative encoding. Encoding was: %d", encoding);
return stringFromFile;
}
// either handle error or attempt further explicit unencodings here
return nil;
}
在许多情况下,usedEncoding效果很好。但是有一些边缘情况,试图找出编码可能非常棘手。这一切都取决于源文件。
答案 1 :(得分:1)
我遇到日文字符问题。我的解决方案是将文件保存到doc目录
NSString *fileData = [NSString stringWithFormat:@"%@", noteContent];
BOOL isWriteToFile = [fileData writeToFile:notePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
阅读文件内容时
[[NSString alloc] initWithContentsOfFile:fullNotePath usedEncoding:nil error:nil];
答案 2 :(得分:0)