如何将韩文单词拆分成各个组成部分?

时间:2019-05-31 21:52:52

标签: swift unicode

因此,例如字符김由ㅣ,ㄱ和made组成。我需要将韩文单词拆分成各个部分,以获取最终的3个字符。

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

let str = "김"
let utf8 = str.utf8
let first:UInt8 = utf8.first!
let char = Character(UnicodeScalar(first))

问题在于,该代码应在应返回ㄱ的情况下返回ê。

1 个答案:

答案 0 :(得分:4)

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

let string = "김"
for scalar in string.decomposedStringWithCompatibilityMapping.unicodeScalars {
  print("\(scalar) ")
}

输出:

ᄀ 
ᅵ 
ᆷ 

按照@rmaddy的建议,您可以创建字符串列表,

let chars = string.decomposedStringWithCompatibilityMapping.unicodeScalars.map { String($0) }
print(chars)
// ["ᄀ", "ᅵ", "ᆷ"]

Apple docs中的韩国相关信息

  

扩展字素簇是表示许多字素的一种灵活方法   复杂脚本字符作为单个Character值。例如,   韩国字母的韩文音节可以表示为   预分解或分解的序列。这两种表示   在Swift中有资格作为单个Character值:

let precomposed: Character = "\u{D55C}"                  // 한
let decomposed: Character = "\u{1112}\u{1161}\u{11AB}"   // ᄒ, ᅡ, ᆫ
// precomposed is 한, decomposed is 한