总体思路:
遍历所有的字符编码,能正确读取输出转换的就是文本文件的编码格式。
代码如下:
//
// main.m
// 检测文本字符编码格式的小技巧
//
// Created by 杜子兮 (duzixi) on 14-6-21.
// Copyright (c) 2014年 lanou3g.com All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *arrEncoding = @[@(NSASCIIStringEncoding),
@(NSNEXTSTEPStringEncoding),
@(NSJapaneseEUCStringEncoding),
@(NSUTF8StringEncoding),
@(NSISOLatin1StringEncoding),
@(NSSymbolStringEncoding),
@(NSNonLossyASCIIStringEncoding),
@(NSShiftJISStringEncoding),
@(NSISOLatin2StringEncoding),
@(NSUnicodeStringEncoding),
@(NSWindowsCP1251StringEncoding),
@(NSWindowsCP1252StringEncoding),
@(NSWindowsCP1253StringEncoding),
@(NSWindowsCP1254StringEncoding),
@(NSWindowsCP1250StringEncoding),
@(NSISO2022JPStringEncoding),
@(NSMacOSRomanStringEncoding),
@(NSUTF16StringEncoding),
@(NSUTF16BigEndianStringEncoding),
@(NSUTF16LittleEndianStringEncoding),
@(NSUTF32StringEncoding),
@(NSUTF32BigEndianStringEncoding),
@(NSUTF32LittleEndianStringEncoding)
];
NSArray *arrEncodingName = @[@"NSASCIIStringEncoding",
@"NSNEXTSTEPStringEncoding",
@"NSJapaneseEUCStringEncoding",
@"NSUTF8StringEncoding",
@"NSISOLatin1StringEncoding",
@"NSSymbolStringEncoding",
@"NSNonLossyASCIIStringEncoding",
@"NSShiftJISStringEncoding",
@"NSISOLatin2StringEncoding",
@"NSUnicodeStringEncoding",
@"NSWindowsCP1251StringEncoding",
@"NSWindowsCP1252StringEncoding",
@"NSWindowsCP1253StringEncoding",
@"NSWindowsCP1254StringEncoding",
@"NSWindowsCP1250StringEncoding",
@"NSISO2022JPStringEncoding",
@"NSMacOSRomanStringEncoding",
@"NSUTF16StringEncoding",
@"NSUTF16BigEndianStringEncoding",
@"NSUTF16LittleEndianStringEncoding",
@"NSUTF32StringEncoding",
@"NSUTF32BigEndianStringEncoding",
@"NSUTF32LittleEndianStringEncoding"
];
for (int i = 0 ; i < [arrEncoding count]; i++) {
unsigned long encodingCode = [arrEncoding[i] unsignedLongValue];
NSLog(@"(%@)", arrEncodingName[i]);
NSError *error = nil;
NSString *filePath = @"/Users/dlios1/Desktop/event.xml"; // <---这里是要查看的文件路径
NSString *aString = [NSString stringWithContentsOfFile:filePath encoding:encodingCode error:&error];
NSLog(@"Error:%@", [error localizedDescription]);
NSData *data = [aString dataUsingEncoding:encodingCode];
NSString *string = [[NSString alloc] initWithData:data encoding:encodingCode];
NSLog(@"%@", string);
/*
// 如果有必要,还可以把文件创建出来再测试
[string writeToFile:[NSString stringWithFormat:@"/Users/dlios1/Desktop/%@.xml", arrEncodingName[i]]
atomically:YES
encoding:encodingCode
error:&error];
*/
}
}
return 0;
}