gpt4 book ai didi

swift - 如何在 Swift 中获取字符/字符串的 unicode 代码点表示?

转载 作者:搜寻专家 更新时间:2023-11-01 07:10:54 24 4
gpt4 key购买 nike

作为通用解决方案,我们如何在 Swift 中获取字符或字符串的 unicode 代码点?

考虑以下几点:

let A: Character = "A"     // "\u{0041}"
let Á: Character = "Á" // "\u{0041}\u{0301}"

let sparklingHeart = "💖" // "\u{1F496}"
let SWIFT = "SWIFT" // "\u{0053}\u{0057}\u{0049}\u{0046}\u{0054}"

如果我没记错的话,所需的函数可能会返回一个字符串数组,例如:

extension Character {
func getUnicodeCodePoints() -> [String] {
//...
}
}

A.getUnicodeCodePoints()
// the output should be: ["\u{0041}"]

Á.getUnicodeCodePoints()
// the output should be: ["\u{0041}", "\u{0301}"]

sparklingHeart.getUnicodeCodePoints()
// the output should be: ["\u{1F496}"]

SWIFT.getUnicodeCodePoints()
// the output should be: ["\u{0053}", "\u{0057}", "\u{0049}", "\u{0046}", "\u{0054}"]

任何更优雅的建议方法将不胜感激。

最佳答案

通常,StringunicodeScalars 属性返回一个集合它的 unicode 标量值。 (Unicode scalar value 是任何Unicode 代码点,高代理项和低代理项代码点除外。)

例子:

print(Array("Á".unicodeScalars))  // ["A", "\u{0301}"]
print(Array("💖".unicodeScalars)) // ["\u{0001F496}"]

直到 Swift 3 都无法访问Character 直接的 unicode 标量值,它必须是首先转换为 String(有关 Swift 4 状态,请参见下文)。

如果你想看到所有的 Unicode 标量值都是十六进制数然后你可以访问 value 属性(这是一个 UInt32 数字)并根据您的需要对其进行格式化。

示例(对 Unicode 值使用 U+NNNN 表示法):

extension String {
func getUnicodeCodePoints() -> [String] {
return unicodeScalars.map { "U+" + String($0.value, radix: 16, uppercase: true) }
}
}

extension Character {
func getUnicodeCodePoints() -> [String] {
return String(self).getUnicodeCodePoints()
}
}


print("A".getUnicodeCodePoints()) // ["U+41"]
print("Á".getUnicodeCodePoints()) // ["U+41", "U+301"]
print("💖".getUnicodeCodePoints()) // ["U+1F496"]
print("SWIFT".getUnicodeCodePoints()) // ["U+53", "U+57", "U+49", "U+46", "U+54"]
print("🇯🇴".getUnicodeCodePoints()) // ["U+1F1EF", "U+1F1F4"]

Swift 4 更新:

从 Swift 4 开始,CharacterunicodeScalars 可以是直接访问,见SE-0178 Add unicodeScalars property to Character .这使得转换为 String过时的:

let c: Character = "🇯🇴"
print(Array(c.unicodeScalars)) // ["\u{0001F1EF}", "\u{0001F1F4}"]

关于swift - 如何在 Swift 中获取字符/字符串的 unicode 代码点表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44994928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com