【iOS】如何判断文本文件的字符编码格式

来源:互联网 发布:linux 3.14.79下载 编辑:程序博客网 时间:2024/04/29 06:13

总体思路:

遍历所有的字符编码,能正确读取输出转换的就是文本文件的编码格式。


代码如下:

[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. //  
  2. //  main.m  
  3. //  检测文本字符编码格式的小技巧  
  4. //  
  5. //  Created by 杜子兮 (duzixi) on 14-6-21.  
  6. //  Copyright (c) 2014年 lanou3g.com All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. int main(int argc, const charchar * argv[])  
  12. {  
  13.   
  14.     @autoreleasepool {  
  15.           
  16.         NSArray *arrEncoding = @[@(NSASCIIStringEncoding),  
  17.                                  @(NSNEXTSTEPStringEncoding),  
  18.                                  @(NSJapaneseEUCStringEncoding),  
  19.                                  @(NSUTF8StringEncoding),  
  20.                                  @(NSISOLatin1StringEncoding),  
  21.                                  @(NSSymbolStringEncoding),  
  22.                                  @(NSNonLossyASCIIStringEncoding),  
  23.                                  @(NSShiftJISStringEncoding),  
  24.                                  @(NSISOLatin2StringEncoding),  
  25.                                  @(NSUnicodeStringEncoding),  
  26.                                  @(NSWindowsCP1251StringEncoding),  
  27.                                  @(NSWindowsCP1252StringEncoding),  
  28.                                  @(NSWindowsCP1253StringEncoding),  
  29.                                  @(NSWindowsCP1254StringEncoding),  
  30.                                  @(NSWindowsCP1250StringEncoding),  
  31.                                  @(NSISO2022JPStringEncoding),  
  32.                                  @(NSMacOSRomanStringEncoding),  
  33.                                  @(NSUTF16StringEncoding),  
  34.                                  @(NSUTF16BigEndianStringEncoding),  
  35.                                  @(NSUTF16LittleEndianStringEncoding),  
  36.                                  @(NSUTF32StringEncoding),  
  37.                                  @(NSUTF32BigEndianStringEncoding),  
  38.                                  @(NSUTF32LittleEndianStringEncoding)  
  39.                                  ];  
  40.           
  41.         NSArray *arrEncodingName = @[@"NSASCIIStringEncoding",  
  42.                                      @"NSNEXTSTEPStringEncoding",  
  43.                                      @"NSJapaneseEUCStringEncoding",  
  44.                                      @"NSUTF8StringEncoding",  
  45.                                      @"NSISOLatin1StringEncoding",  
  46.                                      @"NSSymbolStringEncoding",  
  47.                                      @"NSNonLossyASCIIStringEncoding",  
  48.                                      @"NSShiftJISStringEncoding",  
  49.                                      @"NSISOLatin2StringEncoding",  
  50.                                      @"NSUnicodeStringEncoding",  
  51.                                      @"NSWindowsCP1251StringEncoding",  
  52.                                      @"NSWindowsCP1252StringEncoding",  
  53.                                      @"NSWindowsCP1253StringEncoding",  
  54.                                      @"NSWindowsCP1254StringEncoding",  
  55.                                      @"NSWindowsCP1250StringEncoding",  
  56.                                      @"NSISO2022JPStringEncoding",  
  57.                                      @"NSMacOSRomanStringEncoding",  
  58.                                      @"NSUTF16StringEncoding",  
  59.                                      @"NSUTF16BigEndianStringEncoding",  
  60.                                      @"NSUTF16LittleEndianStringEncoding",  
  61.                                      @"NSUTF32StringEncoding",  
  62.                                      @"NSUTF32BigEndianStringEncoding",  
  63.                                      @"NSUTF32LittleEndianStringEncoding"  
  64.                                     ];  
  65.           
  66.         for (int i = 0 ; i < [arrEncoding count]; i++) {  
  67.             unsigned long encodingCode = [arrEncoding[i] unsignedLongValue];  
  68.             NSLog(@"(%@)", arrEncodingName[i]);  
  69.             NSError *error = nil;  
  70.             NSString *filePath = @"/Users/dlios1/Desktop/event.xml"// <---这里是要查看的文件路径  
  71.             NSString *aString = [NSString stringWithContentsOfFile:filePath encoding:encodingCode  error:&error];  
  72.             NSLog(@"Error:%@", [error localizedDescription]);  
  73.             NSData *data = [aString dataUsingEncoding:encodingCode];  
  74.             NSString *string = [[NSString alloc] initWithData:data encoding:encodingCode];  
  75.             NSLog(@"%@", string);  
  76.               
  77.             /* 
  78.             // 如果有必要,还可以把文件创建出来再测试 
  79.             [string writeToFile:[NSString stringWithFormat:@"/Users/dlios1/Desktop/%@.xml", arrEncodingName[i]] 
  80.                      atomically:YES 
  81.                        encoding:encodingCode 
  82.                           error:&error]; 
  83.              */  
  84.         }  
  85.     }  
  86.     return 0;  
  87. }  
1 1