iPhoneでgb 2312(中国語)符号化ファイルまたはバイナリストリームを読み込む


変換元:http://www.cnblogs.com/likwo/archive/2011/06/26/2090914.html
iPhoneではgb 2312(中国語)符号化ファイルまたはバイナリストリームを読み出す.
文字コードといえば、ファイルの読み書きに関わったソフトウェア開発者は、国際共通:UTF-8コード、ANSCIIコード、Unicodeコード中国語:GB 2312、GBK日本語、Shift-jisなどを知っているはずです.
このように多くの重要でないことを言って、技術は実際の問題を解決します:
1.UTF-8でエンコードされたテキストファイルを読み込むにはどうすればいいですか?
2.GB 2312(中国語)のテキストファイルをどのように読みますか?
3.他のエンコードファイルを読み込むにはどうすればいいですか?
まず最初の問題を解決し、
1.UTF-8でエンコードされたテキストファイルを読み込むにはどうすればいいですか?
    NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:fileName];
    [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil] 
    // 
    //NSData *data = [NSData dataWithContentsOfFile:filePath];
    //NSString *textFile  = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

 2.GB 2312(中国語)のテキストファイルをどのように読みますか?
多くの人が考えているかもしれませんが、それは簡単ではありません.appleはgb 2312のファイル符号化定数を提供しているに違いありません.それらの定数を見てみましょう.NSUTF 8 StringEncoding定義ファイルを見てみると、GB 2312の定数定義があるはずです.
/* Note that in addition to the values explicitly listed below, NSStringEncoding supports encodings provided by CFString.
See CFStringEncodingExt.h for a list of these encodings.
See CFString.h for functions which convert between NSStringEncoding and CFStringEncoding.
*/
enum {
    NSASCIIStringEncoding = 1,		/* 0..127 only */
    NSNEXTSTEPStringEncoding = 2,
    NSJapaneseEUCStringEncoding = 3,
    NSUTF8StringEncoding = 4,
    NSISOLatin1StringEncoding = 5,
    NSSymbolStringEncoding = 6,
    NSNonLossyASCIIStringEncoding = 7,
    NSShiftJISStringEncoding = 8,          /* kCFStringEncodingDOSJapanese */
    NSISOLatin2StringEncoding = 9,
    NSUnicodeStringEncoding = 10,
    NSWindowsCP1251StringEncoding = 11,    /* Cyrillic; same as AdobeStandardCyrillic */
    NSWindowsCP1252StringEncoding = 12,    /* WinLatin1 */
    NSWindowsCP1253StringEncoding = 13,    /* Greek */
    NSWindowsCP1254StringEncoding = 14,    /* Turkish */
    NSWindowsCP1250StringEncoding = 15,    /* WinLatin2 */
    NSISO2022JPStringEncoding = 21,        /* ISO 2022 Japanese encoding for e-mail */
    NSMacOSRomanStringEncoding = 30,

    NSUTF16StringEncoding = NSUnicodeStringEncoding,      /* An alias for NSUnicodeStringEncoding */

#if MAC_OS_X_VERSION_10_4 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_2_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    NSUTF16BigEndianStringEncoding = 0x90000100,          /* NSUTF16StringEncoding encoding with explicit endianness specified */
    NSUTF16LittleEndianStringEncoding = 0x94000100,       /* NSUTF16StringEncoding encoding with explicit endianness specified */

    NSUTF32StringEncoding = 0x8c000100,                   
    NSUTF32BigEndianStringEncoding = 0x98000100,          /* NSUTF32StringEncoding encoding with explicit endianness specified */
    NSUTF32LittleEndianStringEncoding = 0x9c000100        /* NSUTF32StringEncoding encoding with explicit endianness specified */
#endif
};

残念ながら見つけられませんでしたが、Appleは手がかりを残して探してもらいましたが、注釈をよく見てください.
Note that in addition to the values explicitly listed below, NSStringEncoding supports encodings provided by CFString.
See CFStringEncodingExt.h for a list of these encodings. 
See CFString.h for functions which convert between NSStringEncoding and CFStringEncoding. 
私の英语は比较的に良くなくて、しかし大意は见て明白で、下で符号化のフォーマットを支持しないで、CFStringEncodingExt.h中に書類を明記する.
finderのファイル検索方法でCFStringEncodingExtを見つけました.h .
よく見ると確かにkCFStringEncodingGBが見つかりました18030_2000(kCFStringEncodingGB_2312_80だと思いますが、実際はそうではありません)しかしこれはCFStringEncodingタイプで、NSEncodeのタイプが必要です.
CFStringとNSStringは同じメモリ構造を持ち、NSStringの重要な補完でもある.CFStringのヘルプドキュメントを検索することによって、この方法を見つけた.CFStringConvertEncodingToNSStringEncoding
  NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
  NSString *textFile  = [NSString stringWithContentsOfFile:filePath encoding:enc error:nil];

2つ目の問題は解決しました
3.他のエンコードファイルを読み込むにはどうすればいいですか?   
以上の方法で、三つ目の問題も順調に解決できると信じています.
記事のアドレス:http://www.cnblogs.com/likwo/archive/2011/06/26/2090914.html
転載は出典を明記してください