C中带有Cyrillic符号的有效UTF-8字符串

时间:2013-05-02 12:24:14

标签: c json utf-8

我尝试在C中解析UTF-8 JSON消息。 我将以下代码传递给解析器:

char *text = "{\"mdl\":\"users\",\"fnc\":\"getuserslist\"}";

所有的作品。但是如果message有一个西里尔字符,我的两个解析器都会说字符串是“ 无效的UTF-8字符串 ”。 例如:

char *text = "{\"mdl\":\"пользователи\",\"fnc\":\"получитьсписокпользователей\"}";

我使用了Jansson C解析器和CCAN JSON parcer for C. 在我的主要功能中,我接下来调用了 setlocale

setlocale(LC_ALL, "ru_RU.utf8");

如何使用西里尔字符获取有效的UTF-8字符串?

2 个答案:

答案 0 :(得分:3)

源编码(用于编码C源文本的编码)与目标编码(用于编码运行时字符串的编码)之间的关系并不明显。有关此问题的详细讨论,请参阅this question

确保源代码编码为UTF-8,并且编译器保留此编码。

或者,您可以将字符串手动编码为UTF-8,方法是使用反斜杠转义的UTF-8序列替换非ASCII字符,以便更加确定。

答案 1 :(得分:0)

尝试将控制台设置为UTF8(cp 65001)并将输出重定向到文件,而不是setlocale(LC_ALL,“ru_RU.utf8”)。

//Save As UTF-8 without BOM signature
#include<stdio.h>
#include<Windows.h>
int main(){
    SetConsoleOutputCP(65001);
    char *text = "{\"mdl\":\"пользователи\",\"fnc\":\"получитьсписокпользователей\"}";
    printf("%s",text);
}

我们可以使用西里尔字符获取有效的UTF-8字符串:

{"mdl":"пользователи","fnc":"получитьсписокпользователей"}