Apple开发_字符串与Unicode编码的互转

// 字符串 转Unicode
- (NSString *)utf8ToUnicode:(NSString *)string {
    NSUInteger length = [string length];
    NSMutableString *str = [NSMutableString stringWithCapacity:0];
    for (int i = 0; i < length; i++) {
        NSMutableString *s = [NSMutableString stringWithCapacity:0];
        unichar _char = [string characterAtIndex:i];
        // 判断是否为英文和数字
        if (_char <= '9' && _char >='0') {
            [s appendFormat:@"%@", [string substringWithRange:NSMakeRange(i, 1)]];
        }
        else if(_char >='a' && _char <= 'z') {
            [s appendFormat:@"%@", [string substringWithRange:NSMakeRange(i, 1)]];
        }
        else if(_char >='A' && _char <= 'Z') {
            [s appendFormat:@"%@", [string substringWithRange:NSMakeRange(i, 1)]];
        }
        else {
            // 中文和字符
            [s appendFormat:@"\\u%x", [string characterAtIndex:i]];
            // 不足位数补0 否则解码不成功
            if(s.length == 4) {
                [s insertString:@"00" atIndex:2];
            }
            else if (s.length == 5) {
                [s insertString:@"0" atIndex:2];
            }
        }
        [str appendFormat:@"%@", s];
    }
    return str;

}

// Unicode 转字符串
- (NSString *)replaceUnicode:(NSString *)unicodeStr {

    NSString *tempStr1 = [unicodeStr stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"];
    NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\""];
    NSString *tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""];
    NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];
    NSString *returnStr = [NSPropertyListSerialization propertyListFromData:tempData
                                                           mutabilityOption:NSPropertyListImmutable
                                                                     format:NULL
                                                           errorDescription:NULL];
    return [returnStr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"\n"];
}



NSString *unicode = [self utf8ToUnicode:@"💵"];
    GCLog(@"9999 == %@", unicode);
    unicode = [self replaceUnicode:@"\\u0023"];
    GCLog(@"9999 == %@", unicode);

    NSMutableString *all_str = [[NSMutableString alloc] init];
    for (NSInteger index = 0x0250; index < 0x02AF; index++) {
        NSString *hex_str = [self decimalToHex:index];

        hex_str = [NSString stringWithFormat:@"\\u%@", hex_str];
        unicode = [self replaceUnicode:hex_str];
        
        if (unicode && unicode.length) {
            GCLog(@"9999 == %@", unicode);
            
            [all_str appendString:unicode];
            [all_str appendString:@" "];
        }
    }
posted @ 2022-08-27 14:14  CH520  阅读(185)  评论(0编辑  收藏  举报