最近做项目,需要用到简体和繁体中文转换,因此封装了一个中文转换的类贡献给大家。
大概思路是这样的:
1、先加载简体中文和繁体中文码表
2、将需要转换的中文字符拿到码表上查找相应位置
3、如果查找到了,则取出另一个码表上对应的字符;如果没查到,则不进行转换。
一、详细代码
//
// ZMChineseConvert.m
// ZMChineseConvert
//
// Created by ZengZhiming on 2017/3/30.
// Copyright © 2017年 菜鸟基地. All rights reserved.
//
#import "ZMChineseConvert.h"
@interface ZMChineseConvert ()
@property(nonatomic, strong) NSString *simplifiedCode; //!< 简体中文码表.
@property(nonatomic, strong) NSString *traditionalCode; //!< 繁体中文码表.
@end
@implementation ZMChineseConvert
/**
简体中文转繁体中文
@param simpString 简体中文字符串
@return 繁体中文字符串
*/
+ (NSString *)convertSimplifiedToTraditional:(NSString *)simpString
{
return [[ZMChineseConvert getInstance] convertSimplifiedToTraditional:simpString];
}
/**
繁体中文转简体中文
@param tradString 繁体中文字符串
@return 简体中文字符串
*/
+ (NSString*)convertTraditionalToSimplified:(NSString*)tradString
{
return [[ZMChineseConvert getInstance] convertTraditionalToSimplified:tradString];
}
// 获取单例对象
+ (instancetype)getInstance
{
static id instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
- (instancetype)init
{
self = [super init];
if (self) {
// 加载简体中文和繁体中文码表
NSString *resourcePath = [ [NSBundle mainBundle] resourcePath];
self.simplifiedCode = [NSString stringWithContentsOfFile:[resourcePath stringByAppendingPathComponent:@"SimplifiedCode.txt"] encoding:NSUTF8StringEncoding error:nil];
self.traditionalCode = [NSString stringWithContentsOfFile:[resourcePath stringByAppendingPathComponent:@"TraditionalCode.txt"] encoding:NSUTF8StringEncoding error:nil];
}
return self;
}
/**
简体中文转繁体中文
@param simpString 简体中文字符串
@return 繁体中文字符串
*/
- (NSString *)convertSimplifiedToTraditional:(NSString *)simpString
{
// 空值判断
if (IsNullString(simpString)) {
return nil;
}
// 存储转换结果
NSMutableString *resultString = [NSMutableString string];
// 遍历字符串中的字符
NSInteger length = [simpString length];
for (NSInteger i = 0; i < length; i++)
{
// 在简体中文中查找字符位置,如果存在则取出对应的繁体中文
NSString *simCharString = [simpString substringWithRange:NSMakeRange(i, 1)];
NSRange charRange = [self.simplifiedCode rangeOfString:simCharString];
if(charRange.location != NSNotFound) {
NSString *tradCharString = [self.traditionalCode substringWithRange:charRange];
[resultString appendString:tradCharString];
}else{
[resultString appendString:simCharString];
}
}
return resultString;
}
/**
繁体中文转简体中文
@param tradString 繁体中文字符串
@return 简体中文字符串
*/
- (NSString *)convertTraditionalToSimplified:(NSString *)tradString
{
// 空值判断
if (IsNullString(tradString)) {
return nil;
}
// 存储转换结果
NSMutableString *resultString = [NSMutableString string];
// 遍历字符串中的字符
NSInteger length = [tradString length];
for (NSInteger i = 0; i < length; i++)
{
// 在繁体中文中查找字符位置,如果存在则取出对应的简体中文
NSString *tradCharString = [tradString substringWithRange:NSMakeRange(i, 1)];
NSRange charRange = [self.traditionalCode rangeOfString:tradCharString];
if(charRange.location != NSNotFound) {
NSString *simCharString = [self.simplifiedCode substringWithRange:charRange];
[resultString appendString:simCharString];
}else{
[resultString appendString:tradCharString];
}
}
return resultString;
}
@end
二、使用方式
/** 简转繁点击响应 */
- (IBAction)onSimpToTradAction:(UIButton *)sender {
_resultLabel.text = [ZMChineseConvert convertSimplifiedToTraditional:_textField.text];
}
/** 繁转简点击响应 */
- (IBAction)onTradToSimpAction:(UIButton *)sender {
_resultLabel.text = [ZMChineseConvert convertTraditionalToSimplified:_textField.text];
}
干货,非常详细,谢谢博主分享。