我正在使用unicode在c中打印ogonek的拉丁字母列表


#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{   int i;
setlocale(LC_CTYPE,"de_DE.UTF-8");
wchar_t cA[256] = { 
0xC498, 0xC4AE, 0xC5B2, 0xC482,   0xC496, 0xC48E, 0xC898, 0xC89A, 0xC48A, 0xC4A0,   0xC4B9, 0xC5BB, 0xC7B8,   0xC485,   0xC499,   0xCAF,
0xC5B3, 0xC483, 0xC497, 0xC48F,   0xC899, 0xC89B, 0xC48B, 0xC587, 0xC49A, 0xC4A1,   0xC4BA, 0xC5BC, 0x20,     0x21,     0x22,     0x23,
0xC582,  0x25,  0x26,   0x27,     0x28,   0x29,   0x2A,   0x2B,   0x2C,   0x2D,     0x2E,   0x2F,   0x30,     0x31,     0x32,     0x33,
0x34,    0x35,  0x36,   0x37,     0x38,   0x39,   0x3A,   0x3B,   0x3C,   0X3D,     0x3E,   0x3F,   0x40,     0x41,     0x42,     0x43,
0x44,    0x45,  0x46,   0x47,     0x48,   0x49,   0x4A,   0x4B,   0x4C,   0x4D,     0x4E,   0x4F,   0x50,     0x51,     0x52,     0x53,
0x54,    0x55,  0x56,   0x57,     0x58,   0x59,   0x5A,   0x5B,   0xE1B5BE, 0x5D,   0xC581,  0x5F,  0xC484,   0x61,     0x62,     0x63,
0x64,    0x65,  0x66,   0x67,     0x68,   0x69,   0x6A,   0x6B,   0x6C,     0x6D,    0x6E,    0x6F,  0x70,     0x71,     0x72,     0x73,
0x74,    0x75,  0x76,   0x77,     0x78,   0x79,   0x7A,   0xC2AB,  0xC5AF, 0xC2BB,  0x013D,  0XC4A6,0xC3A1, 0xC3A0, 0xC3A9, 0xC3A8,   0xC3AD, 0xC3AC, 0xC3B3, 0xC3B2, 0xC3BA, 0xC3B9,   0xC391, 0xC387, 0xC59E,   0xC39F,   0xC2A1,   0xC5B8,
0xC3A2, 0xC3A4, 0xC3AA, 0xC3AB,   0xC3AE, 0xC3AF, 0xC3B4, 0xC3B6, 0xC3BB, 0xC3BC,   0xC3B1, 0xC3A7, 0xC59F,   0xC49F,   0xC4B1,   0xC3BF,
0xC4B6, 0xC585, 0xC2A9, 0xC4A2, 0xC49E, 0xC49B, 0xC588, 0xC591,  0xC590, 0xE282AC, 0xC2A3,   0x24, 0xC480,    0xC492,   0xC4AB,   0XC5AA,
0xC4B7, 0xC2B9, 0xC4BB, 0xC4A3,   0xC4BC, 0xC4B0, 0xC584, 0xC5B1, 0xC5B0, 0xC2BF,   0xC4BE, 0xC2B0, 0xC481,   0xC493,   0xC4AB,   0xC5AB,
0xC381, 0xC380, 0xC389, 0xC388,   0xC38D, 0xC38C, 0xC393, 0xC392, 0xC39A, 0xC399,   0xC598, 0xC48C, 0xC5A0,   0xC5BD,   0xC390,   0xC4BF,
0xC382, 0xC384, 0xC38A, 0xC38B,   0xC38E, 0xC38F, 0xC394, 0xC396, 0xC39B, 0xC39C,   0xC599, 0xC48D, 0xC5A1,   0xC5BE,   0xC491,   0xC580,
0xC383, 0xC385, 0xC386, 0xC592,   0xC5B7, 0xC39D, 0xC395, 0xC398, 0xC39E, 0xC58A,   0xC594, 0xC486, 0xC59A,   0xC5B9,   0xC5A6,   0xC3B0,
0xC3A3, 0xC3A5, 0xC3A6, 0xC593,   0xC5B5, 0xC3BD, 0xC3B5, 0xC3B8, 0xC3BE, 0xC58B,   0xC595, 0xC487, 0xC59B,   0xC5BA,   0xC5A7,    0xC4A7,
};
for( i=0;i<252;i++){
wprintf(L"%lcn", (unsigned char)cA[i]);
}
return 0;
}

我试过写setlocale,但即使它显示不同的符号。我需要它打印正确的符号。如。对于0xC498,它打印的是¾而不是Ę。

  1. 在函数wprintf中,您正在对wchar_t进行类型转换(相当于uint16_t)到unsigned char(相当于uint8_t)。因此,您每次都会丢失一半的信息你正在打印东西。
  2. 我认为你对拉丁字符的单码设置不正确。请按照图表https://en.wikipedia.org/wiki/Latin_script_in_Unicode再试一次。
  3. 同时,wprintf(L"%lcn", (wchar_t)0x0118);会给你你正在寻找的角色。

最新更新