音译/转置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