Dmi*_*nko 10 iphone objective-c transliteration nsstring ios
我想将一个西里尔字符串音译成最接近拉丁语的字符串.例如"матрешка"=>"matreshka","водка"=>"伏特加".理想情况下,我想在NSString或其他已经知道字母表的所有内容并且可以进行对话的其他地方准备好使用方法.
但是如果iOS API中不存在这样的功能,那么我将完全满意像ruby的tr方法,它只是使用指定为参数的简单映射替换字符串中的字符.
"????".tr('?????', 'abvgd')
Run Code Online (Sandbox Code Playgroud)
ksh*_*ksh 19
尝试CFStringTransform使用带有kCFStringTransformToLatin变换标识符的CFMutableString函数或使用简单映射创建NSString类别.
由问题海报编辑:更具体地说,它应该是:
NSMutableString *buffer = [@"??????? ????" mutableCopy];
CFMutableStringRef bufferRef = (__bridge CFMutableStringRef)buffer;
CFStringTransform(bufferRef, NULL, kCFStringTransformToLatin, false);
NSLog(@"%@", buffer); // outputs "russkij âzyk"
Run Code Online (Sandbox Code Playgroud)
如果您不需要变音符号或口音,您可以致电 CFStringTransform(bufferRef, NULL, kCFStringTransformStripCombiningMarks, false);
附加文章:http://nshipster.com/cfstringtransform/
对于Swift 5,String有一种称为的方法applyingTransform(_:reverse:)。applyingTransform(_:reverse:)具有以下声明:
func applyingTransform(_ transform: StringTransform, reverse: Bool) -> String?
Run Code Online (Sandbox Code Playgroud)
以下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")
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2261 次 |
| 最近记录: |