iPhone中编码转换方法

我们可以使用以下方法进行编码转换

  NSString* str2 = [NSString stringWithCString:str1 encoding:enc1];

  再调用NSString的cStringUsingEncoding:enc2实现从enc1到enc2的转换

  但是获取enc枚举值是个难题

  1. NSString.h中只定义了以下编码值

  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

  };

  2. iphone中肯定是支持中文的,只是NSString中没有定义这个枚举值,我们可以通过两种方法获得这个枚举值

  第一个方法是通过CFStringConvertEncodingToNSStringEncoding

  比如:NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

  NSString* str2 = [NSString stringWithCString:str1 encoding:enc];

  全部的kCFStringEncoding定义参考CFStringEncodingExt.h

  另外CFStringConvertIANACharSetNameToEncoding也很有用

  3. 另外一种方法是通过

  const NSStringEncoding *encodings = [NSString availableStringEncodings];

  NSMutableString *str = [[NSMutableString alloc] init];

  NSStringEncoding encoding;

  while ((encoding = *encodings++) != 0)

  {

  [str appendFormat: @"%@ === %in", [NSString localizedNameOfStringEncoding:encoding], encoding];

  }

  然后打印str数组,你就可以知道每一个encoding的枚举值为多少了,比如中文的为-2147482063

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值