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;
}