Unicode 轉換成 GBK
NSString *string= @"中國chn"
NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
char *cString = [string cStringUsingEncoding:gbkEncoding];
或者:
NSData *data = [string dataUsingEncoding:gbkEncoding];
char *cString = (char *)[data bytes];
轉換時,有些字符可能不兼容,比如:¥、£、~(在iOS5.0和6.0中鍵盤的編碼不一樣),需要做特殊處理。
需要注意的是:
NSString中:
- (NSUInteger)length
返回Unicode字符數,包括單個字符組成的字符序列,因此不能用此方法確定字符串在打印時是否可見以及顯示的長度。默認采用big-endian方式存儲
C語言中strlen:
返回字符串的長度(非編碼以後的字符數,而是編碼占用的字節數),不含'\0'
int 強制類型轉換 char
char占一個字節對應的十進制整數范圍為0~255
當int最大超過255時,只會保留低位,捨棄高位.
即:(char)(value%256) == (char)value
GBK采用雙字節編碼
UTF-8采用變長編碼,最大長度4字節
ASCII:128個字符,其中33個無法顯示
UNICODE編碼:(兼容ISO 8859-1 前256個字符)
0~0x10FFFFFF