NSMutableString *result = [NSMutableString stringWithString:@"今天的天真的很蓝"];
//先转换为带声调的拼音
CFStringTransform((CFMutableStringRef)result,NULL, kCFStringTransformMandarinLatin,NO);
NSLog(@"1............%@",result);
//再转换为不带声调的拼音
CFStringTransform((CFMutableStringRef)result,NULL, kCFStringTransformStripDiacritics,NO);
NSLog(@"2............%@",result);
输出:
2016-02-15 15:51:20.844 BezierPathDemo[7368:202200] 1............jīn tiān de tiān zhēn de hěn lán
2016-02-15 15:51:20.846 BezierPathDemo[7368:202200] 2............jin tian de tian zhen de hen lan
CFStringTransform
中的 transform
CFStringTransform
中的 transform
去掉重音和变音符
Énġlišh långuãge lẳcks iñterêßţing diaçrïtičş. 如此类的字符串,把扩展的拉丁字符集正则化为 ASCII 友好型的表示,它非常有用。用 kCFStringTransformStripCombiningMarks
为 Unicode 字符命名
kCFStringTransformToUnicodeName
不同拼写之间转写
除了英语这个重大例外(和它那令人愉快的拼写不一致),书写系统一般是将语言音调编码成一致的符号表示。欧洲语言一般使用拉丁字母(外加一些变音符),俄罗斯用西里尔字母,日本用平假名和片假名,泰国、韩国和阿拉伯国家也都有自己的字母。
虽然每种语言都有特殊的音调列表,也许有些其他语言会缺失,所有主要书写系统的交集已经足以让你高效的在不同字母之间转写(不要跟翻译搞混了)。
CFStringTransform
Transformation | Input | Output |
kCFStringTransformLatinArabic | mrḥbạ | مرحبا |
kCFStringTransformLatinCyrillic | privet | привет |
kCFStringTransformLatinGreek | geiá sou | γειά σου |
kCFStringTransformLatinHangul | annyeonghaseyo | 안녕하세요 |
kCFStringTransformLatinHebrew | şlwm | שלום |
kCFStringTransformLatinHiragana | hiragana | ひらがな |
kCFStringTransformLatinKatakana | katakana | カタカナ |
kCFStringTransformLatinThai | s̄wạs̄dī | สวัสดี |
kCFStringTransformHiraganaKatakana | にほんご | ニホンゴ |
kCFStringTransformMandarinLatin | 中文 | zhōng wén |
并且这只是用了核心类库中常量定义!直接传入一个ICU transform表达式,CFStringTransform
正则化用户产生的内容
字符串变换的一个更实际的应用是正则化不可预知的用户输入。即使你的应用并不单独处理其他语言,你也应当能智能地处理用户向你的应用输入的任何内容。
例如,你想在设备上建立一个可搜索的电影索引,它包含世界各地的人的问候:
- 首先,应用
kCFStringTransformToLatin
Hello! こんにちは! สวัสดี! مرحبا! 您好! → Hello! kon'nichiha! s̄wạs̄dī! mrḥbạ! nín hǎo!
- 然后,应用
kCFStringTransformStripCombiningMarks
Hello! kon'nichiha! s̄wạs̄dī! mrḥbạ! nín hǎo! → Hello! kon'nichiha! swasdi! mrhba! nin hao!
- 最后,用
CFStringLowercase
- 转为小写,并用
- 分词用作文本的索引。
(hello, kon'nichiha, swasdi, mrhba, nin, hao)
通过对用户输入的文本使用同样的变换,你就可以实现一个通用的搜索,无论搜索文本或内容是什么语言!
CFStringTransform