iOS_經(jīng)驗(3)_轉(zhuǎn)碼(UTF-8 /GBK/Unicode/GBK2312)

一丶 UTF-8 /GBK

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson于1992年創(chuàng)建。現(xiàn)在已經(jīng)標準化為RFC 3629。UTF-8用1到6個字節(jié)編碼UNICODE字符。用在網(wǎng)頁上可以同一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。

GBK全稱《漢字內(nèi)碼擴展規(guī)范》(GBK即“國標”、“擴展”漢語拼音的第一個字母,英文名稱:Chinese Internal Code Specification

/**
 * GBK->UTF8
 */
//方法一 舊方法
NSString *encode1 = [@"%E6%88%91" stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"--encode1->%@<------", encode1);

//方法二   新方法
NSLog(@"--encode2->%@<------", [@"%E6%88%91" stringByRemovingPercentEncoding]);

/**
 *  UTF-8 ->GBK
 */
//方法一 舊方法
NSString *decode1 = [@"我" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"--decode1-->%@<-----", decode1);

//方法二 新方法
NSLog(@"--decode1-->%@<-----",  [@"我" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]);

二丶Unicode/UTF-8

Unicode(統(tǒng)一碼、萬國碼、單一碼)是計算機科學(xué)領(lǐng)域里的一項業(yè)界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,它為每種語言中的每個字符設(shè)定了統(tǒng)一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉(zhuǎn)換、處理的要求。

出現(xiàn)類似這樣格式的字段"\U6df1\U5733\U56fd\U5f00\U884c01\U673a\U623",通常為Unicode碼,轉(zhuǎn)換測試函數(shù)為

/**
 *  Unicode碼UTF-8
 *
 *  @param unicodeStr Unicode
 *
 *  @return UTF-8
 */
- (NSString *)replaceUnicode:(NSString *)unicodeStr
{
    NSString *tempStr1 = [unicodeStr 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];
    //新方法
NSString *returnStr = [NSPropertyListSerialization propertyListWithData:tempData options:NSPropertyListImmutable  format:NULL  error:NULL];
    
                                                           
    return [returnStr stringByReplacingOccurrencesOfString:@"\\r\\n" withString:@"\n"];
}

三丶 GBK/UTF-8

出現(xiàn)類似這樣格式的字段"深圳銀行",通常為GBK碼,轉(zhuǎn)換方式為


    NSURL *url = [NSURL URLWithString:@"深圳銀&#x884C"];
    
    NSData *responseData = [NSData dataWithContentsOfURL:url];
    
    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:enc];

四丶 UTF-8/GBK2312

在ftp轉(zhuǎn)碼解碼中遇到的問題;

//解碼:從服務(wù)器請求數(shù)據(jù),轉(zhuǎn)成顯示中文
- (NSString *)ChangeToChinessEncode:(NSString *)fileTitleStr
{    if (fileTitleStr != NULL)    {        char *ReadStoreValue = (char *)[fileTitleStr cStringUsingEncoding:[NSString defaultCStringEncoding]];        if ( ReadStoreValue != NULL )        {
            fileTitleStr = [NSString stringWithCString:ReadStoreValue encoding: -2147482062];
        }    }    return fileTitleStr;
}


//編碼:
- (NSString *)encodeString:(NSString *)string;
{
    NSString *urlEncoded = (__bridge_transfer NSString *) CFURLCreateStringByAddingPercentEscapes(
        NULL,
        (__bridge CFStringRef) string,
        NULL,
        (CFStringRef) @"!*'\"();:@&=+$,?%#[]% ",
        kCFStringEncodingGB_18030_2000);
    return urlEncoded;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容