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
相关产品推荐
相关产品推荐

