You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kitura(Swift)中获取正确的Unicode响应?

解决Kitura返回波斯文(Unicode)乱码的问题

你遇到的乱码问题是因为响应头未明确指定UTF-8字符编码,浏览器默认用了非UTF-8的编码(比如ISO-8859-1)解析返回的JSON内容,导致Unicode字符显示异常。以下是几种可行的解决方法:

方法一:全局配置响应头的字符编码

在Kitura应用启动时,给所有响应添加Content-Type头并指定UTF-8:

import Kitura

// 在应用初始化的地方添加全局中间件
router.all(middleware: { request, response, next in
    response.headers["Content-Type"] = "application/json; charset=utf-8"
    next()
})

这样所有路由的响应都会带上正确的编码声明,浏览器会自动用UTF-8解析内容。

方法二:针对单个路由设置响应头

如果只想给/states路由单独配置,可以修改处理器代码,在返回数据前手动设置响应头:

extension App {
    func getStatesHandler(request: RouterRequest, response: RouterResponse, completion: ([State], RequestError?) -> Void) {
        // 添加响应头设置
        response.headers["Content-Type"] = "application/json; charset=utf-8"
        let result = [State(id: 1, name: "تهران"),
                      State(id: 2, name: "آذربایجان شرقی"),
                      State(id: 3, name: "کرمان"),
                      State(id: 4, name: "آذربایجان غربی"),
                      State(id: 5, name: "اردبیل"),
                      State(id: 6, name: "اصفهان"),
                      State(id: 7, name: "البرز"),
                      State(id: 8, name: "ایلام"),
                      State(id: 9, name: "بوشهر"),
                      State(id: 10, name: "چهارمحال و بختیاری"),
                      State(id: 11, name: "خراسان جنوبی"),
                      State(id: 12, name: "خراسان رضوی")]
        completion(result, nil)
    }
}

注:这里需要修改处理器签名,添加request和response参数(Kitura的Codable处理器支持该签名格式)。

方法三:配置Kitura的JSON编码器

Kitura默认使用内置JSON序列化工具,你也可以替换为Swift标准库的JSONEncoder,从序列化层面保证输出UTF-8编码:

// 初始化路由时配置自定义JSON编码器
func initializeCodableRoutes(app: App) {
    let encoder = JSONEncoder()
    encoder.dataEncodingStrategy = .utf8 // 明确指定UTF-8编码
    encoder.outputFormatting = .prettyPrinted // 可选,格式化JSON输出
    app.router.get("/states", handler: app.getStatesHandler, encoder: encoder)
}

搭配响应头的charset=utf-8声明,能彻底解决编码解析问题。

验证方式

修改后重启服务器,再次请求/states即可看到正确的波斯文;也可以用curl命令检查响应头:

curl -I {baseurl}/states

若返回结果包含Content-Type: application/json; charset=utf-8,则说明配置生效。

内容的提问来源于stack exchange,提问作者Jafar Khoshtabiat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:20:39