iOS中编码转化
1.UTF-8转化
NSString *data = @" 你好,北京! " ;
// 转换成 UTF-8
NSString *dataUTF8 = [data stringByAddingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];
NSLog ( @"%@" ,dataUTF8);
//UTF-8 转 GBK,将UTF8代码替换,官方解释如下。
//Replaces all percent escapes with the matching characters as determined by the given encoding. Returns nil if the transformation is not possible (i.e. the percent escapes give a byte sequence not legal in the given encoding). See CFURLCreateStringByReplacingPercentEscapes in CFURL.h for more complex transformations
NSString *dataGBK = [dataUTF8 stringByReplacingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];
NSLog ( @"%@" ,dataGBK);
在Xcode4.2中执行结果如下:
将上述方法封装,如下:
//Unicode 转 UTF-8
+ ( NSString *)encodeToPercentEscapeString: ( NSString *) input
{
// Encode all the reserved characters, per RFC 3986
// (< http://www.ietf.org/rfc/rfc3986.txt >)
NSString *outputStr = ( NSString *)
CFURLCreateStringByAddingPercentEscapes ( kCFAllocatorDefault ,
( CFStringRef )input,
NULL ,
( CFStringRef ) @"!*'();:@&=+$,/?%#[]" ,
kCFStringEncodingUTF8 );
return outputStr;
}
+ ( NSString *)decodeFromPercentEscapeString: ( NSString *) input
{
NSMutableString *outputStr = [ NSMutableString stringWithString :input];
[outputStr replaceOccurrencesOfString : @"+"
withString : @" "
options : NSLiteralSearch
range : NSMakeRange ( 0 , [outputStr length ])];
return [outputStr stringByReplacingPercentEscapesUsingEncoding : NSUTF8StringEncoding ];
}
2.UTF-8和Unicode转化
//Unicode 转 UTF-8
+ ( NSString *) replaceUnicode:( NSString *)aUnicodeString
{
NSString *tempStr1 = [aUnicodeString stringByReplacingOccurrencesOfString : @"\\u" withString : @"\\U" ];
NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString : @"\"" withString : @"\\\"" ];
NSString *tempStr3 = [[ @"\"" stringByAppendingString :tempStr2] stringByAppendingString : @"\"" ];
NSData *tempData = [tempStr3 dataUsingEncoding : NSUTF8StringEncoding ];
NSString * returnStr = [ NSPropertyListSerialization propertyListFromData :tempData
mutabilityOption : NSPropertyListImmutable
format : NULL
errorDescription : NULL ];
return [returnStr stringByReplacingOccurrencesOfString : @"\\r\\n" withString : @"\n" ];
}
+( NSString *) utf8ToUnicode:( NSString *)string
{
NSUInteger length = [string length ];
NSMutableString *s = [ NSMutableString stringWithCapacity : 0 ];
for ( int i = 0 ;i < length; i++)
{
unichar _char = [string characterAtIndex :i];
// 判断是否为英文和数字
if (_char <= '9' && _char >= '0' )
{
[s appendFormat : @"%@" ,[string substringWithRange : NSMakeRange (i, 1 )]];
}
else if (_char >= 'a' && _char <= 'z' )
{
[s appendFormat : @"%@" ,[string substringWithRange : NSMakeRange (i, 1 )]];
}
else if (_char >= 'A' && _char <= 'Z' )
{
[s appendFormat : @"%@" ,[string substringWithRange : NSMakeRange (i, 1 )]];
}
else
{
[s appendFormat : @"\\u%x" ,[string characterAtIndex :i]];
}
}
return s;
}