因此,例如字符김由ㅣ,ㄱ和made组成。我需要将韩文单词拆分成各个部分,以获取最终的3个字符。
我尝试执行以下操作,但似乎无法正确输出:
let str = "김"
let utf8 = str.utf8
let first:UInt8 = utf8.first!
let char = Character(UnicodeScalar(first))
问题在于,该代码应在应返回ㄱ的情况下返回ê。
答案 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 한