JSONにおけるGB 2312の変換について

1151 ワード

JSONでのNSSTRINGはデフォルトフォーマットがUNICODですが、JSONではGB 2312が与えられているのでデータに差が出ます.
資料を調べたら、kCFStringEncodingGBを使ってもいいと言われていました.18030_2000は変換できますが、やはり問題があります.最後に、比較メモリで、正しいデータごとに00が増えていることがわかりました.これはJSONがNSStringに転送された問題です.
    
C3 DC C2 EB B2 BB B6 D4 A3 AC C7 EB D6 D8 D0 C2 CA E4 C8 EB
    
C3 00 DC 00 C2 00 EB 00 B2 00 BB 00 B6 00 D4 00 A3 00 AC 00 C7 00 EB 00 D6 00 D8 00 D0 00 C2 00 CA 00 E4 00 C8 00 EB 00

解決策は次のとおりです.
+ (NSString*)getFormJSONbyGB2312:(NSString*)string
{
    int nLen = [string length];
    if (nLen > 0)
    {
        char* pWChar = (char*)[string cStringUsingEncoding:NSUTF16StringEncoding];
        char* pChar = new char[nLen+1];
        memset(pChar, 0, nLen+1);
        for (int i=0; i<nLen; i++)
        {
            pChar[i] = pWChar[i*2];
        }
        
        NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
        
        NSString *textMsg  = [NSString stringWithCString:(char*)pChar encoding:enc]; 

        delete pChar;
        
        return textMsg;
    }
    
    return nil;
}