2

C で UTF-8 JSON メッセージを解析しようとしています。次のコードをパーサーに渡します。

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

そしてすべての作品。しかし、メッセージにキリル文字が含まれている場合、両方のパーサーは文字列が「無効な UTF-8 文字列」であると判断します。例:

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

Jansson C パーサーと C 用の CCAN JSON パーサーを使用しました。メイン関数では、setlocaleを次のように呼び出しています。

setlocale(LC_ALL, "ru_RU.utf8");

キリル文字を使用して有効な UTF-8 文字列を取得するにはどうすればよいですか?

4

2 に答える 2

3

ソース エンコーディング (C ソース内のテキストをエンコードするために使用されるエンコーディング) とターゲット エンコーディング (ランタイム文字列をエンコードするために使用されるエンコーディング) の関係は明らかではありません。これに関する詳細については、この質問を参照してください。

ソースのエンコーディングが UTF-8 であること、およびコンパイラがこれを保持していることを確認してください。

または、非 ASCII 文字をバックスラッシュでエスケープされた UTF-8 シーケンスに置き換えることで、文字列を手動で UTF-8 としてエンコードすることもできます。

于 2013-05-02T12:34:25.150 に答える
0

setlocale(LC_ALL, "ru_RU.utf8") の代わりに、コンソールを UTF8 (cp 65001) に設定し、出力をファイルにリダイレクトしてみてください。

//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":"получитьсписокпользователей"}
于 2013-09-30T13:56:22.697 に答える