如何将韩语单词拆分成它的组成部分?

esk*_*imo 3 unicode swift

那么,例如字符 ? 由。。。制成由。。。做成 ?, ?和 ?。我需要将韩语单词拆分成它的组成部分以获得结果 3 个字符。

我尝试执行以下操作,但似乎没有正确输出:

let str = "?"
let utf8 = str.utf8
let first:UInt8 = utf8.first!
let char = Character(UnicodeScalar(first))
Run Code Online (Sandbox Code Playgroud)

问题是,该代码返回ê,什么时候应该返回?。

Kam*_*ran 5

您需要使用decomposedStringWithCompatibilityMapping字符串来获取unicode scalar值,然后使用这些标量值来获取字符。下面的东西,

let string = "?"
for scalar in string.decomposedStringWithCompatibilityMapping.unicodeScalars {
  print("\(scalar) ")
}
Run Code Online (Sandbox Code Playgroud)

输出:

? 
? 
? 
Run Code Online (Sandbox Code Playgroud)

您可以创建字符串列表,

let chars = string.decomposedStringWithCompatibilityMapping.unicodeScalars.map { String($0) }
print(chars)
// ["?", "?", "?"]
Run Code Online (Sandbox Code Playgroud)

Apple 文档中的韩文相关信息

扩展字素簇是一种将许多复杂脚本字符表示为单个字符值的灵活方式。例如,韩语字母表中的韩文音节可以表示为预先组合或分解的序列。这两种表示都可以作为 Swift 中的单个 Character 值:

let precomposed: Character = "\u{D55C}"                  // ?
let decomposed: Character = "\u{1112}\u{1161}\u{11AB}"   // ?, ?, ?
// precomposed is ?, decomposed is ???
Run Code Online (Sandbox Code Playgroud)