iOS编码变换
iOS编码转换
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];
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
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