arrays - 将 unicode 代码点数组转换为字符串

标签 arrays swift string unicode

给定一个表示 unicode 代码点的字符串数组:

let arr : [String] = ["0023", "FE0F", "20E3"]

我怎样才能将它动态地转换成一个 swift 字符串?静态地,我发现我可以写:

let str = "\u{0023}\u{FE0F}\u{20E3}"

但是,我想动态地执行此操作,因为每个数组将代表一些代码点序列。在上面的示例中,输出将是 #️⃣

最佳答案

您可以将每个六边形字符串转换为 UInt32 , 初始化一个 Unicode.Scalar为每个元素创建一个 String UnicodeScalarView来自它:

let arr = ["0023", "FE0F", "20E3"]
let values = arr.compactMap{ UInt32($0, radix: 16) }
let unicodeScalars = values.compactMap(Unicode.Scalar.init)
let string = String(String.UnicodeScalarView(unicodeScalars))

也可以写成一行:

let arr = ["0023", "FE0F", "20E3"]
let string = String(String.UnicodeScalarView(arr.compactMap{ UInt32($0, radix: 16) }.compactMap(Unicode.Scalar.init)))

编辑/更新:

如果您的所有字符串都可以用 UInt16 值表示,您还可以使用字符串初始值设定项 init(utf16CodeUnits: UnsafePointer<unichar>, count: Int)如@MartinR here 所示:

let arr = ["0023", "FE0F", "20E3"]
let values = arr.compactMap { UInt16($0, radix: 16) }
let string = String(utf16CodeUnits: values, count: values.count)  // "#️⃣"

关于arrays - 将 unicode 代码点数组转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270804/

相关文章:

arrays - MATLAB:创建 3D 数组,矢量化与循环

javascript - 结果过滤的多个条件

javascript - 如何在 AngularJS 的页面上找到第一个键 "id"?

swift - 如何编写一个接受字符串并删除第一个元音之前的所有辅音的函数

ios - 为什么画中画在iOS启动片刻后立即停止?

swift - UIImageView 不适合我的屏幕

c - C 中带有 char 数组的未定义行为(?)

ruby-on-rails - 如何在 Rails View 中循环并打印多维数组?

javascript - 匹配不包含某个子串的子串

c - 在 C 中通过定界符函数实现拆分字符串