音译/转置NSString中的字符

我想将西里尔string音译成最接近拉丁文的string。 例如“матрешка”=>“matreshka”,“водка”=>“伏特加酒”。 所以理想情况下,我想要一些准备在NSString或其他地方使用方法已经知道的一切字母,并可以进行交谈。

但是,如果iOS API中不存在这样的function,那么我将完全满意于像ruby的tr方法,只是使用指定为参数的简单映射replacestring中的字符。

"баба".tr('абвгд', 'abvgd') 

可以使用kCFStringTransformToLatin变换标识符尝试CFStringTransform函数,也可以使用简单映射创buildNSString类别。

由问题海报编辑:更具体地说应该是:

 NSMutableString *buffer = [@"русский язык" mutableCopy]; CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer; CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false); NSLog(@"%@", buffer); // outputs "russkij âzyk" 

如果你不需要变音符或重音符,你可以调用CFStringTransform(bufferRef, NULL, kCFStringTransformStripCombiningMarks, false);

其他文章: http : //nshipster.com/cfstringtransform/

使用Swift 4和iOS 11, String有一个名为applyingTransform(_:reverse:)applyingTransform(_:reverse:)具有以下声明:

 func applyingTransform(_ transform: StringTransform, reverse: Bool) -> String? 

以下Playground代码显示了如何使用applyingTransform(_:reverse:)为了从西里尔文到拉丁字符音译:

 import Foundation let string = "матрешка" let latinString = string.applyingTransform(StringTransform.toLatin, reverse: false) let noDiacriticString = latinString?.applyingTransform(StringTransform.stripDiacritics, reverse: false) print(latinString) // prints: Optional("matreška") print(noDiacriticString) // prints: Optional("matreska") 

另外,如果需要,可以使用Core Foundation CFStringTransform(_:_:_:_:)函数:

 import Foundation let mutableString = NSMutableString(string: "матрешка") CFStringTransform(mutableString, nil, kCFStringTransformToLatin, false) print(mutableString) // prints: matreška CFStringTransform(mutableString, nil, kCFStringTransformStripDiacritics, false) print(mutableString) // prints: matreska 
Interesting Posts