Swift中打印含中文的NSDictionary:如何将Unicode转为中文显示?
解决Swift中NSDictionary打印中文显示Unicode的问题
哈哈,这个坑我踩过好多次!在Swift里直接打印NSDictionary时,Xcode控制台总会把中文转成一堆\u开头的Unicode编码,看着特别费劲。给你几个亲测有效的解决办法,按需选用:
方法一:转成Swift原生Dictionary再打印
Swift的原生Dictionary对中文的支持更友好,直接打印就能显示正常中文。只需要把NSDictionary强制转换为Swift字典即可:
// 假设你有一个带中文的NSDictionary let nsDict: NSDictionary = ["username": "李四", "hobby": "编程"] // 转换为Swift原生字典 let swiftDict = nsDict as! [String: Any] // 直接打印 print(swiftDict)
输出结果会直接显示中文:["username": "李四", "hobby": "编程"]
方法二:给NSDictionary写扩展,自定义打印方法
如果不想每次都手动转换,可以给NSDictionary写一个扩展,通过JSON序列化来输出中文。这个方法还能格式化输出,结构看起来更清晰:
extension NSDictionary { /// 打印NSDictionary中的中文内容 func printWithChinese() { do { // 将NSDictionary转为JSON数据,开启格式化选项 let jsonData = try JSONSerialization.data(withJSONObject: self, options: .prettyPrinted) // 将JSON数据转为UTF-8字符串 if let jsonStr = String(data: jsonData, encoding: .utf8) { print(jsonStr) } else { // 转换失败时 fallback 到默认打印 print(self) } } catch { print("转换失败:\(error.localizedDescription)") } } } // 使用示例 let nsDict: NSDictionary = ["book": "Swift从入门到精通", "price": 89.9] nsDict.printWithChinese()
输出的格式化字符串会清晰显示中文:
{ "book" : "Swift从入门到精通", "price" : 89.9 }
方法三:调试时用LLDB命令临时查看
如果只是调试时想快速查看中文,不想修改代码,可以在Xcode控制台的LLDB中输入以下命令:
po NSString(stringWithFormat:@"%@", yourNSDictionaryVariableName)
把yourNSDictionaryVariableName换成你实际的变量名,就能直接看到中文内容了。
小科普:为什么会显示Unicode?
其实就是NSDictionary的默认debugDescription实现,会把非ASCII字符转成Unicode编码输出;而Swift原生Dictionary则是直接用UTF-8编码处理中文,所以打印结果会不一样。
内容的提问来源于stack exchange,提问作者JsonKit
相关产品推荐
相关产品推荐

