我尝试在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字符串?
答案 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":"получитьсписокпользователей"}