gpt4 book ai didi

iphone - NSString stringWithContentsOfFile :fileName non-english letters

转载 作者:行者123 更新时间:2023-12-03 20:52:15 27 4
gpt4 key购买 nike

我有一个文件,其中有许多行以“\n”分隔。其中一行是:

Christian Grundekjøn

除非删除该行,否则我无法读取该文件。我使用以下代码逐行读取:

for (NSString *line in [[NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:NULL] componentsSeparatedByString:@"\n"])

如果我不删除该行,代码根本不会进入 for 循环。什么也没读。如何处理非英文字母?

最佳答案

如果您从 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 效果很好。但在某些边缘情况下,尝试找出编码可能会非常棘手。这一切都取决于源文件。

关于iphone - NSString stringWithContentsOfFile :fileName non-english letters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com