gpt4 book ai didi

swift - JSONSerialization的UTF-8编码问题

转载 作者:行者123 更新时间:2023-11-30 11:04:28 24 4
gpt4 key购买 nike

我试图在 Swift 中将 struct 转换为 Dictionary 。这是我的代码:

extension Encodable {

var dictionary: [String: Any]? {
if let data = try? JSONEncoder().encode(self) {
if let dict = try? JSONSerialization.jsonObject(with: data) as? [String: Any] {
return dict
}
return nil
}
return nil
}

}

这在大多数情况下都有效。但是当我尝试转换包含 unicode 字符(例如中文)的嵌套结构时,发生了这种情况:

struct PersonModel: Codable {
var job: String?
var contacts: [ContactSimpleModel]
var manager: ManagerSimpleModel?
}

struct ContactSimpleModel: Codable {
var relation: String
var name: String
}

struct ManagerSimpleModel: Codable {
var name: String
var age: Int
}

let contact1 = ContactSimpleModel(relation: "朋友", name: "宙斯")
let contact2 = ContactSimpleModel(relation: "同学", name: "奥丁")
let manager = ManagerSimpleModel(name: "拉斐尔", age: 31)
let job = "火枪手"

let person = PersonModel(job: job, contacts: [contact1, contact2], manager: manager)

if let dict = person.dictionary {
print(dict)
}

这段代码的结果是这样的:

["contacts": <__NSArrayI 0x600002471980>(
{
name = "\U5b99\U65af";
relation = "\U670b\U53cb";
},
{
name = "\U5965\U4e01";
relation = "\U540c\U5b66";
}
)
, "manager": {
age = 31;
name = "\U62c9\U6590\U5c14";
}, "job": 火枪手]

你可以看到结果。这些嵌套结构中的汉字就变成了utf-8编码的字符串。顶级属性“job”:火枪手是正确的。但这些嵌套结构中的值不是原始字符串。

这是 JSONSerialization 的错误吗?或者怎样才能正确?

更多信息。我使用的结果是这样的:

var sortedQuery = ""

if let dict = person.dictionary {
sortedQuery = dict.sorted(by: {$0.0 < $1.0})
.map({ "\($0)\($1)" })
.joined(separator: "")
}

用于检查查询是否合法。结果与Java或其他平台不一样。

最佳答案

结果非常好。这就是打印时数组或字典的内部字符串表示形式(Unicode 之前的遗产)。

将值分配给标签或 TextView ,您将看到预期的字符。

关于swift - JSONSerialization的UTF-8编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52890221/

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