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

json-c中与Python的json.dumps()等价的方法是什么?如何实现希腊字符的Unicode转义?

解决json-c库转义希腊字符为Unicode编码的问题

首先,你的问题主要来自两个方面:json-c的输出选项未开启Unicode转义,以及Windows环境下的编码兼容性问题。我们一步步来解决:

1. 使用正确的json-c输出标志

json-c的json_object_to_json_string_ext函数提供了JSON_C_TO_STRING_ESCAPE_UNICODE标志,它会将所有非ASCII的Unicode字符转义为\uXXXX格式,这正是你需要的、和Pythonjson.dumps()一致的行为。

你之前使用的JSON_C_TO_STRING_PLAIN只会输出原始字符,不会做转义;再加上Windows控制台默认编码不支持UTF-8,就出现了问号乱码的情况。

2. 修正后的代码

修改代码替换输出标志,同时务必确保源文件保存为UTF-8编码(这是关键前提):

#include <json.h>
#include <stdio.h>

int main() {  // 标准C规范中main函数应返回int类型
    // 确保字符串是UTF-8编码(依赖源文件的UTF-8保存格式)
    char* text = "{\"key\":\"στελιοσ\"}";
    struct json_object* jobj = json_tokener_parse(text);
    
    if (!jobj) {
        printf("JSON解析失败\n");
        return 1;
    }

    // 组合标志:保持格式化简洁 + 开启Unicode转义
    const char* json_str = json_object_to_json_string_ext(jobj, 
        JSON_C_TO_STRING_PLAIN | JSON_C_TO_STRING_ESCAPE_UNICODE);
    
    printf("jobj from str:\n---\n%s\n---\n", json_str);
    
    json_object_put(jobj);  // 记得释放json对象内存,避免泄漏
    return 0;
}

3. Windows环境下的编译与运行注意事项

  • 源文件编码:将你的.c文件保存为UTF-8(无BOM)格式,VS Code、CLion等主流编辑器都支持这个设置。如果使用MSVC编译器,需要添加/utf-8编译选项,确保编译器正确识别源文件的UTF-8编码。
  • 控制台编码:如果运行时控制台仍然显示乱码,可以先在控制台执行chcp 65001切换到UTF-8编码,再运行程序,这样就能正确看到转义后的\uXXXX字符串。

4. 预期输出

运行修正后的代码,你会得到和Pythonjson.dumps()一致的结果:

jobj from str:
---
{"key":"\u03c3\u03c4\u03b5\u03bb\u03b9\u03bf\u03c3"}
---

额外提示

  • 始终检查json_tokener_parse的返回值,如果源字符串编码错误或格式非法,函数会返回NULL,需要处理这种情况避免程序崩溃。
  • 使用json_object_put释放json_object的内存是json-c的最佳实践,能有效防止内存泄漏。

内容的提问来源于stack exchange,提问作者Stelios M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:47:46