我想知道objective-c中的文本文件编码。你能解释一下如何知道吗?
答案 0 :(得分:7)
您可以使用stringWithContentsOfFile:usedEncoding:error:
,除了新字符串外,还会返回使用的编码。
我应该注意到,这本质上是一种启发式过程 - 并不总是能够确定文件的字符编码。
答案 1 :(得分:1)
有些文本文档显示了我项目中的乱码,所以我需要知道文本文件的编码,更改其编码,让它可以被人类阅读。
我发现了这个:http://lists.w3.org/Archives/Public/www-validator/2002Aug/0084.html 并使用OC重写代码,它可以为我工作:
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sourceFilePath = [documentPath stringByAppendingPathComponent:@"fileName.txt"];
NSFileHandle *sourceFileHandle = [NSFileHandle fileHandleForReadingAtPath:sourceFilePath];
NSData *begainData = [sourceFileHandle readDataOfLength:3];
Byte *bytes = (Byte *)[begainData bytes];
if (bytes[0] == 0xff
&& bytes[1] == 0xfe
&& (begainData.length < 4
|| bytes[2] != 0
|| bytes[3] != 0
)
)
{
NSLog(@"unicode");
}
if (bytes[0] == 0xfe
&& bytes[1] == 0xff
)
NSLog(@"BigEndianUnicode");
if (bytes[0] == 0xef && bytes[1] == 0xbb && bytes[2] == 0xbf)
NSLog(@"UTF8");
if (bytes[0] == 0x2b && bytes[1] == 0x2f && bytes[2] == 0x76)
NSLog(@"UTF7");
if (bytes[0] == 0xff && bytes[1] == 0xfe && bytes[2] == 0 && bytes[3] == 0)
NSLog(@"UTF32");
if (begainData.length < 3)
NSLog(@"ascii");