iOS从文件读取字符串,无分隔符分割成数组

iOS从文件读取中午使用UTF-8编码时,部分复杂的中文会占用4-6个字节。如果按1位来分割加入数组就会出现错误。如 𬺓 字,会占用两个长度。

    NSString *files  = [[NSBundle bundleWithPath:_bundlePath] pathForResource:@"cn_1.1" ofType:@"txt"];
    NSString *lines   = [[NSString stringWithContentsOfFile:files encoding:NSUTF8StringEncoding error:nil] stringByReplacingOccurrencesOfString:@"\n" withString:@""];
    NSMutableArray *characterArray = [NSMutableArray array];
    NSRange range = NSMakeRange(0, 1);
    for(int i = 0; i < lines.length; i += range.length){
        range.location = i;
        NSString *character = [lines substringWithRange:range];
        [characterArray addObject:character];
    }
77695B33-126B-4E32-B8EC-C33FCC3CB780.png

使用[str rangeOfComposedCharacterSequenceAtIndex:i]方法可以获得改文字的真实长度,用于分割可以得到正确的结果

    NSString *files  = [[NSBundle bundleWithPath:_bundlePath] pathForResource:@"cn_1.1" ofType:@"txt"];
    NSString *lines   = [[NSString stringWithContentsOfFile:files encoding:NSUTF8StringEncoding error:nil] stringByReplacingOccurrencesOfString:@"\n" withString:@""];
    NSMutableArray *characterArray = [NSMutableArray array];
    NSRange range = NSMakeRange(0, 1);
    for(int i = 0; i < lines.length; i += range.length){
        range = [lines rangeOfComposedCharacterSequenceAtIndex:i];
        NSString *character = [lines substringWithRange:range];
        [characterArray addObject:character];
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、字符串编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要...
    Hello密斯托李阅读 361评论 0 0
  • 05-03-字符串和编码 https://www.liaoxuefeng.com/wiki/10169596636...
    qu6zhi阅读 169评论 0 0
  • 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数...
    Aedda阅读 186评论 0 0
  • 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数...
    遥遥的远方阅读 270评论 0 0
  • 本章目录 Part One:字符编码 Part Two:字符串 Part Three:字符串格式化 字符串可以说是...
    黄烨1121阅读 398评论 0 0