ios开发之字符串转码(二)
来源:互联网 发布:幸运飞艇全天计划数据 编辑:程序博客网 时间:2024/05/16 15:48
iOS支持多种字符编码,可以将unicode字符转码为其他编码的字符。
编码列表
iOS支持的编码有:
typedef NSUInteger NSStringEncoding;NS_ENUM(NSStringEncoding) { NSASCIIStringEncoding = 1, /* 0..127 only */ NSNEXTSTEPStringEncoding = 2, NSJapaneseEUCStringEncoding = 3, NSUTF8StringEncoding = 4, NSISOLatin1StringEncoding = 5, NSSymbolStringEncoding = 6, NSNonLossyASCIIStringEncoding = 7, NSShiftJISStringEncoding = 8,/* kCFStringEncodingDOSJapanese */ NSISOLatin2StringEncoding = 9, NSUnicodeStringEncoding = 10, NSWindowsCP1251StringEncoding = 11,/* Cyrillic; same as AdobeStandardCyrillic */ NSWindowsCP1252StringEncoding = 12,/* WinLatin1 */ NSWindowsCP1253StringEncoding = 13,/* Greek */ NSWindowsCP1254StringEncoding = 14,/* Turkish */ NSWindowsCP1250StringEncoding = 15,/* WinLatin2 */ NSISO2022JPStringEncoding = 21,/* ISO 2022 Japanese encoding for e-mail */ NSMacOSRomanStringEncoding = 30, NSUTF16StringEncoding = NSUnicodeStringEncoding, /* An alias for NSUnicodeStringEncoding */ NSUTF16BigEndianStringEncoding = 0x90000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ NSUTF16LittleEndianStringEncoding = 0x94000100, /* NSUTF16StringEncoding encoding with explicit endianness specified */ NSUTF32StringEncoding = 0x8c000100, /* NSUTF32StringEncoding encoding with explicit endianness specified */ NSUTF32LittleEndianStringEncoding = 0x9c000100 /* NSUTF32StringEncoding encoding with explicit endianness specified */};
返回编码的名字
+(NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding;
NSLog(@"encode = %@",[NSString localizedNameOfStringEncoding:NSASCIIStringEncoding]);NSLog(@"encode = %@",[NSString localizedNameOfStringEncoding:NSNEXTSTEPStringEncoding]);NSLog(@"encode = %@",[NSString localizedNameOfStringEncoding:NSJapaneseEUCStringEncoding]);NSLog(@"encode = %@",[NSString localizedNameOfStringEncoding:NSUTF8StringEncoding]);NSLog(@"encode = %@",[NSString localizedNameOfStringEncoding:NSISOLatin1StringEncoding]);
输出
2017-03-22 05:20:55.394 objc-base[3675:649138] encode = 2017-03-22 05:20:55.396 objc-base[3675:649138] encode = 2017-03-22 05:20:55.397 objc-base[3675:649138] encode = 2017-03-22 05:20:55.408 objc-base[3675:649138] encode = Unicode (UTF-8)2017-03-22 05:20:55.409 objc-base[3675:649138] encode =
c字符串默认的编码
@property (class, readonly) NSStringEncoding defaultCStringEncoding;
最快的编码方式
@property (readonly) NSStringEncoding fastestEncoding;
最小的编码方式
@property (readonly) NSStringEncoding smallestEncoding;
NSLog(@"%lu",[@"a" fastestEncoding]);NSLog(@"%lu",[@"a" smallestEncoding]);
输出
2017-03-22 05:30:44.901 objc-base[3719:655769] 12017-03-22 05:30:44.903 objc-base[3719:655769] 1
支持的编码
@property (class, readonly) const NSStringEncoding *availableStringEncodings;
编码转换
转码为NSData
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)lossy;
参数encoding指定编码方式,参数lossy表示是否允许有损转换。
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding;
参数encoding指定编码方式。
NSString *str=@"你好,世界!";NSData *data=[str dataUsingEncoding:NSWindowsCP1250StringEncoding allowLossyConversion:NO];NSLog(@"data = %@",data);data=[str dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];NSLog(@"data = %@",data);data=[str dataUsingEncoding:NSUTF16StringEncoding allowLossyConversion:NO];NSLog(@"data = %@",data);
输出
2017-03-22 03:43:34.530 objc-base[3527:592251] data = (null)2017-03-22 03:43:34.533 objc-base[3527:592251] data = <e4bda0e5 a5bdefbc 8ce4b896 e7958cef bc81>2017-03-22 03:43:34.534 objc-base[3527:592251] data = <fffe604f 7d590cff 164e4c75 01ff>
转码为c字符串
- (nullable const char *)cStringUsingEncoding:(NSStringEncoding)encoding
参数encoding指定编码。
返回类型为const char *,不是obj-c的对象,但是它也是自动释放的。因为cStringUsingEncoding方法首先将字符串转换为NSData类型,然后返回调用bytes方法返回const char *。由于NSData对象是自动释放的,所以const char *也是自动释放的。下文返回类型为const char *的同理。
@property (readonly) const void *bytes
转码为utf8字符串
@property (nullable, readonly) const char *UTF8String;
转码后字符串的长度
- (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding)enc;
参数enc指定编码
字符串编码后最大长度
- (NSUInteger)maximumLengthOfBytesUsingEncoding:(NSStringEncoding)enc;
是否能够转码
- (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding;
获取c字符串
- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding;
将字符串转码为字节序列并放入缓冲区中,若转码出错返回NO,若缓冲区长度小于或等于字节序列长度返回NO,否则返回YES。
参数buffer 指定缓冲区,参数maxBufferCount 指定缓冲区最大长度,参数encoding指定编码。
获取字节序列
- (BOOL)getBytes:(nullable void *)buffer maxLength:(NSUInteger)maxBufferCount usedLength:(nullable NSUInteger *)usedBufferCount encoding:(NSStringEncoding)encoding options:(NSStringEncodingConversionOptions)options range:(NSRange)range remainingRange:(nullable NSRangePointer)leftover;
以下方法不推荐使用
转码为c字符串–使用默认编码
- (nullable const char *)cString
转码为c字符串–使用默认编码–允许有损转换
- (nullable const char *)lossyCString
转码为c字符串的长度–使用默认编码
- (NSUInteger)cStringLength
获取c字符串
- (void)getCString:(char *)bytes maxLength:(NSUInteger)maxLength range:(NSRange)aRange remainingRange:(nullable NSRangePointer)leftoverRange
- (void)getCString:(char *)bytes maxLength:(NSUInteger)maxLength
- (void)getCString:(char *)bytes
0 0
- ios开发之字符串转码(二)
- iOS开发系列之Objective-C基础:NSString字符串类型(二)
- iOS开发之玩转字符串
- iOS开发之玩转字符串
- iOS开发之玩转字符串
- iOS开发之玩转字符串
- ios开发之字符串初始化(一)
- ios开发之字符串操作(三)
- ios开发之字符串操作(四)
- iOS开发之自动布局(二)
- iOS 开发之ASIHttpRequest(二)
- iOS开发之缓存(二):缓存
- iOS开发之UIActivityIndicatorView(二)
- iOS开发之UINavigationController(二)
- iOS开发之block(二)
- iOS开发之数据传递(二)
- iOS开发之设计模式(二)
- iOS开发之UIWebView(二)
- 第一篇博客,简单写一下关于消息队列
- MyBatis和Hibernate的区别
- Ubuntu下安装gem包curses的步骤
- JSP基础---两种方式打印九九乘法表
- 微软全新设计Windows 10蓝屏壁纸
- ios开发之字符串转码(二)
- 超级用户相关命令的区别
- 前端扫雷之XSS和CSRF攻击
- mysql基础
- Wamp server localhost 404 not found
- linux c 开发php7扩展
- 修改计算机MAC地址
- 查找包含某字符串的文件
- L2-002. 链表去重