Ios 如何将未编码字符串拆分为字符

Ios 如何将未编码字符串拆分为字符,ios,arrays,swift,string,unicode,Ios,Arrays,Swift,String,Unicode,我有像 "\U0aac\U0ab9\U0ac1\U0ab5\U0a9a\U0aa8", "\U0a97\U0ac1\U0ab8\U0acd\U0ab8\U0acb", "\U0aa6\U0abe\U0ab5\U0acb", "\U0a96\U0a82\U0aa1" 但是我想用unicode字符分割这个字符串 我不知道该怎么办。我知道按功能划分的组件,但在这里没有用。 \任何帮助都会出现因此,返回的字符串已经有了“\”,因为为了使用组件,您需要有一个额外的转义“\”,以便能够执行以下操作: va

我有像

"\U0aac\U0ab9\U0ac1\U0ab5\U0a9a\U0aa8",
"\U0a97\U0ac1\U0ab8\U0acd\U0ab8\U0acb",
"\U0aa6\U0abe\U0ab5\U0acb",
"\U0a96\U0a82\U0aa1"
但是我想用unicode字符分割这个字符串

我不知道该怎么办。我知道按功能划分的组件,但在这里没有用。
\任何帮助都会出现

因此,返回的字符串已经有了“\”,因为为了使用组件,您需要有一个额外的转义“\”,以便能够执行以下操作:

var listofCodes = ["\\U0aac\\U0ab9\\U0ac1\\U0ab5\\U0a9a\\U0aa8", "\\U0aac\\U0ab9\\U0ac1\\U0ab5\\U0a9a\\U0aa8"]

var unicodeArray :[String] = []
listofCodes.forEach { string in

    unicodeArray
        .append(contentsOf: string.components(separatedBy: "\\"))
    unicodeArray.removeAll(where: {value in  value == ""})
}

print(unicodeArray)


一旦您指定如何获取这些字符串,我将修改此答案,因为我从一开始就收到无效字符串错误。

如果您获取的字符串确实包含
\U
字符,则需要手动解析它们并提取unicode标量值。大概是这样的:

let strings = [
    "\\U0aac\\U0ab9\\U0ac1\\U0ab5\\U0a9a\\U0aa8",
    "\\U0a97\\U0ac1\\U0ab8\\U0acd\\U0ab8\\U0acb",
    "\\U0aa6\\U0abe\\U0ab5\\U0acb",
    "\\U0a96\\U0a82\\U0aa1"
]

for str in strings {
    let chars = str.components(separatedBy: "\\U")
    var string = ""
    for ch in chars {
        if let val = Int(ch, radix: 16), let uni = Unicode.Scalar(val) {
            string.unicodeScalars.append(uni)
        }
    }
    print(string)
}


您可以映射数组,将其元素拆分为非六位数值,将其压缩映射为UInt32值,使用它们初始化unicode标量,并将数组的结果元素映射为unicode DescalarView,并使用它初始化一个新字符串:

let arr = [
    #"\U0aac\U0ab9\U0ac1\U0ab5\U0a9a\U0aa8"#,
    #"\U0a97\U0ac1\U0ab8\U0acd\U0ab8\U0acb"#,
    #"\U0aa6\U0abe\U0ab5\U0acb"#,
    #"\U0a96\U0a82\U0aa1"#]

这会打印出来

[”બહુવચન", "ગુસ્સો", "દાવો", "ખંડ"]


您是如何获得这些stings的?这些是古吉拉特语单词Strings我理解这一部分,但您是自己键入它们还是从API检索它们?因为API很糟糕……您不能用这种方式格式化字符串。这里的“字符”是什么?请给出实际需要的输出。但是我们需要的部分在哪里“按unicode字符拆分字符串”?@matt如果这不是OP想要实现的,我可以简单地删除我的帖子,但我认为他不知道如何表达他的需要。可能是真的!我询问了所需输出的示例,但没有回应。因此我们无法确定。
let strings = arr.map {
    $0.split { !$0.isHexDigit }
    .compactMap { UInt32($0, radix: 16) }
    .compactMap(Unicode.Scalar.init)
}.map { String(String.UnicodeScalarView($0)) }

print(strings)