我有一个名字由Kata Kana 1字节(例如ジ),我用片假名搜索2字节ジ,但结果为零。 你知道如何将搜索文本从Kata假名2字节转换为1字节吗?请帮帮我。
我的代码:
let filteredData = searchText.isEmpty ? employeeList : employeeList.filter({(data : employee) -> Bool in
return data.emp_name_kana?.range(of: searchText, options: .caseInsensitive) != nil
})
答案 0 :(得分:1)
Kata Kana 1字节不是Unicode中"ジ"
等字符的合适名称,最好将其称为Halfband Katakana,如Unicode standard中所示。每个这样的字符都不能用UTF-8中的1字节表示。
您可以在比较字符串之前应用一些转换:
let halfwidthKatakanaStr = "ザジズゼゾ"
let fullwidthSearchText = "ジ"
let found = halfwidthKatakanaStr.range(of: fullwidthSearchText.applyingTransform(.fullwidthToHalfwidth, reverse: false)!) != nil
print(found) //->true
(注意)以上代码适用于iOS9 +,macOS 10.11+。如果您需要定位某些较旧的平台,则可能需要调用经典CFStringTransform
。