深度解析IOS开发中编码转换方法
http://mobile.51cto.com/iphone-283494.htm
IOS开发中编码转换方法是本文要介绍的内容,主要是来学习一下编码转换的内容,不多说,直接来看详细内容。我们可以使用以下方法进行编码转换。
- NSString* str2 = [NSString stringWithCString:str1 encoding:enc1];
再调用NSString的cStringUsingEncoding:enc2实现从enc1到enc2的转换
但是获取enc枚举值是个难题
1、NSString.h中只定义了以下编码值
- enum {
- NSASCIIStringEncoding = 1,
- NSNEXTSTEPStringEncoding = 2,
- NSJapaneseEUCStringEncoding = 3,
- NSUTF8StringEncoding = 4,
- NSISOLatin1StringEncoding = 5,
- NSSymbolStringEncoding = 6,
- NSNonLossyASCIIStringEncoding = 7,
- NSShiftJISStringEncoding = 8,
- NSISOLatin2StringEncoding = 9,
- NSUnicodeStringEncoding = 10,
- NSWindowsCP1251StringEncoding = 11,
- NSWindowsCP1252StringEncoding = 12,
- NSWindowsCP1253StringEncoding = 13,
- NSWindowsCP1254StringEncoding = 14,
- NSWindowsCP1250StringEncoding = 15,
- NSISO2022JPStringEncoding = 21,
- NSMacOSRomanStringEncoding = 30,
- NSUTF16StringEncoding = NSUnicodeStringEncoding,
- #if MAC_OS_X_VERSION_10_4 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_2_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
- NSUTF16BigEndianStringEncoding = 0x90000100,
- NSUTF16LittleEndianStringEncoding = 0x94000100,
- NSUTF32StringEncoding = 0x8c000100,
- NSUTF32BigEndianStringEncoding = 0x98000100,
- NSUTF32LittleEndianStringEncoding = 0x9c000100
- #endif
- };
难道iphone中中文还不支持?不会吧?
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
小结:深度解析IOS开发中编码转换方法的内容介绍完了,希望通过本文的学习能对你有所帮助!
// IPMessenger用送受信文字列変換(NSString→C文字列)
// NSString 转换为 char*
- (const char*)SJISString
{
// SJISの場合、'¥'は'\'に変換しておかないと文字化けする
// SJIS的场合,'¥'转换'\\',防止乱码
NSString* str = [self stringByReplacingOccurrencesOfString:@"¥"
withString:@"\\"];
if (![str canBeConvertedToEncoding:NSShiftJISStringEncoding]) {
// 変換できない文字がある場合は安全な方法で変換する
NSData* data1 = [str dataUsingEncoding:NSShiftJISStringEncoding
allowLossyConversion:YES];
NSMutableData* data2 = [[data1 mutableCopy] autorelease];
[data2 appendBytes:"\0" length:1];
return (const char*)[data2 bytes];
}
// 変換できるならそのまま
return [str cStringUsingEncoding:NSShiftJISStringEncoding];
}