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

  •  转为小写,并用

CFStringTokenizer

  •  分词用作文本的索引。

(hello, kon'nichiha, swasdi, mrhba, nin, hao)

通过对用户输入的文本使用同样的变换,你就可以实现一个通用的搜索,无论搜索文本或内容是什么语言!


CFStringTransform