色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c json過(guò)濾亂碼

在C語(yǔ)言中,經(jīng)常需要使用JSON數(shù)據(jù)來(lái)進(jìn)行數(shù)據(jù)傳輸和處理。但是在處理JSON數(shù)據(jù)時(shí),很容易遇到中文字符出現(xiàn)亂碼的問(wèn)題。本文將介紹如何使用C語(yǔ)言編寫代碼,解決JSON數(shù)據(jù)中文字符出現(xiàn)亂碼的問(wèn)題。

一般來(lái)說(shuō),C語(yǔ)言中使用的是ASCII編碼。而JSON數(shù)據(jù)中使用的是Unicode編碼。因此,在將JSON數(shù)據(jù)轉(zhuǎn)化為C語(yǔ)言字符串時(shí),需要進(jìn)行編碼轉(zhuǎn)換。

char* convert(const char* utf8)
{
int size = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wide = malloc(sizeof(wchar_t) * size);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wide, size);
size = WideCharToMultiByte(CP_ACP, 0, wide, -1, NULL, 0, NULL, NULL);
char* ansi = malloc(sizeof(char) * size);
WideCharToMultiByte(CP_ACP, 0, wide, -1, ansi, size, NULL, NULL);
free(wide);
return ansi;
}

上面的代碼中,我們使用了Windows API函數(shù)MultiByteToWideChar和WideCharToMultiByte,將UTF8編碼轉(zhuǎn)化為ANSI編碼。

當(dāng)我們使用ANSI編碼的C語(yǔ)言字符串來(lái)處理JSON數(shù)據(jù)時(shí),仍然會(huì)出現(xiàn)中文字符亂碼的問(wèn)題。因此,我們需要將ANSI編碼的C語(yǔ)言字符串再次轉(zhuǎn)化為Unicode編碼。

char* utf8_encode(const char* input)
{
size_t input_len = strlen(input);
size_t output_len = utf8_len(input);
wchar_t* wide = malloc(sizeof(wchar_t) * output_len);
utf8_decode(wide, output_len, input, input_len);
size_t size = WideCharToMultiByte(CP_UTF8, 0, wide, -1, NULL, 0, NULL, NULL);
char* utf8 = malloc(sizeof(char) * size);
WideCharToMultiByte(CP_UTF8, 0, wide, -1, utf8, size, NULL, NULL);
free(wide);
return utf8;
}

上面的代碼中,我們使用了Windows API函數(shù)WideCharToMultiByte和MultiByteToWideChar,將ANSI編碼轉(zhuǎn)化為UTF8編碼。

將以上兩段代碼結(jié)合起來(lái),我們就可以使用C語(yǔ)言處理JSON數(shù)據(jù)時(shí)不出現(xiàn)中文字符亂碼的問(wèn)題了。