1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>//pour system()
int main(void)
{
char const sczCyrillique[] = "\xE5";
char const sczGrec[] = "\xE5";
UINT const uiCpCyrillique = 1251;
UINT const uiCpGrec = 1253;
WCHAR szBufferW[10] = L"";
char szBufferOemCp850[10] = "";
//Test avec le caractère cyrillique
MultiByteToWideChar( uiCpCyrillique, 0, sczCyrillique, -1, szBufferW, 10);
printf("Caractere cyrillique %u (0x%02X) en unicode : %u (0x%04X)\n",
(unsigned char)sczCyrillique[0], (unsigned char)sczCyrillique[0],
szBufferW[0], szBufferW[0]
);
//Test avec le caractère grec
MultiByteToWideChar( uiCpGrec, 0, sczGrec, -1, szBufferW, 10);
printf("Caractere grec %u (0x%02X) en unicode : %u (0x%04X)\n",
(unsigned char)sczGrec[0], (unsigned char)sczGrec[0],
szBufferW[0], szBufferW[0]
);
MessageBoxW(NULL, szBufferW, L"Caract\xE8re grec en unicode",
MB_OK | MB_ICONINFORMATION);
//Test en OEM (Codepage 850, qui ne contient pas le carac. grec)
CharToOemBuffW(szBufferW, szBufferOemCp850, 10);
printf("Caractere unicode %u (0x%04X) converti en OEM (CP-850) : %u (0x%02X)\n",
szBufferW[0], szBufferW[0],
(unsigned char)szBufferOemCp850[0], (unsigned char)szBufferOemCp850[0]
);
printf("Chaine unicode convertie en OEM (CP-850) : %s\n", szBufferOemCp850);
//Test UTF-8
{
char szBufferUtf8[10] = "";
size_t tailleChnUtf8;
size_t i;
WideCharToMultiByte(CP_UTF8, 0, szBufferW, -1,
szBufferUtf8, sizeof(szBufferUtf8), NULL, NULL);
//Ca marche a tous les coups,
//l'UTF-8 garantit qu'aucun octet d'un caratere n'est nul
tailleChnUtf8 = strlen(szBufferUtf8);
printf("Caractere grec converti en %u octets UTF-8:\n", tailleChnUtf8);
for(i = 0 ; i<tailleChnUtf8 ; i++)
printf("%02X ", (unsigned char)szBufferUtf8[i]);
printf("\n");
}
system("pause");
return 0;
} |
Partager