JSONにおけるGB 2312の変換について
1151 ワード
JSONでのNSSTRINGはデフォルトフォーマットがUNICODですが、JSONではGB 2312が与えられているのでデータに差が出ます.
資料を調べたら、kCFStringEncodingGBを使ってもいいと言われていました.18030_2000は変換できますが、やはり問題があります.最後に、比較メモリで、正しいデータごとに00が増えていることがわかりました.これはJSONがNSStringに転送された問題です.
解決策は次のとおりです.
資料を調べたら、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;
}