Меня смущают два разных значения asciii некоторых символов, которые я пытаюсь обработать. Я должен разрешить символы от 128 до 170 значений ascii в c.Но когда приходит евро, он анализирует значение до 8364 вместо 128. Та же проблема с символами до 159 ... затем из 160 я получаю правильные значения.Я немного запутался с выводом простого кода.
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
int main()
{
wchar_t nwchar = 128;
setlocale(LC_ALL, "en_US.utf8");
while (nwchar < 255) {
wprintf(L"\n string is [%d][%lc]", nwchar, nwchar);
nwchar += 1;
}
return 0;
}
ВЫХОД: строка [128] [�] строка [129] [�]
строка[130] [�]
строка - [131] [�]
строка - [132] [�]
до 159, затем
строкаэто [160] []
строка это [161] [¡]
строка это [162] [¢]
строка это [163] [£]
строка - [164] [¤]
строка - [165] [¥]
, поэтому из 160 выводится правильный символ.
Я посмотрел следующую ссылку для расширенного ascii: https://www.ascii -code.com / , поэтому для значения 128 должен появиться символ евро.
Я попытался использовать какое-то веб-кодирование для генерации символа иЯ получил.
код:
<!DOCTYPE html>
<html>
<body>
<p>I will display €</p>
<p>I will display €</p>
<p>I will display €</p>
<p>I will display €</p>
<p>I will display €</p>
</body>
</html>
вывод:
Я покажу € 1043 *
Я покажу € 1045 *
Я покажу € 1047 *
Я покажу € 1049 *
Я покажу € 1051 *
Теперь я смущен тем, как печатается тот же символEd для различных значений.
число 8364 или 0x20AC я получил через C-код за €.Я использовал следующий код
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
int main()
{
setlocale(LC_ALL, "en_US.utf8");
wchar_t nwchar = 128;
wchar_t nwchar1;
unsigned char ch[] = "€";
int sz = 0;
//setlocale(LC_ALL, "");
while (nwchar < 130) {
wprintf(L"\n string is [%d][%lc]", nwchar, nwchar);
nwchar += 1;
}
sz = mblen(&ch[0], MB_CUR_MAX);
int t = mbtowc(&nwchar1, &ch, sz);
wprintf(L"\n string is[%d] [%d][%lc]", sz, nwchar1, nwchar1);
return 0;
}
и получил следующий вывод.
строка равна [128] []
строка равна [129] [] строка равна [3] [8364] [€]
Весь приведенный выше код C и его вывод взяты из linux redhat, и я также попробовал его на [https://www.onlinegdb.com/], который выдал такой же вывод на своем терминале.
Теперь, как обращаться с символом евро или аналогичными значениями, которые падают ниже 155, потому что когда я получаю значение, оно отличается от символа евро, равного 8364.
Я что-то упускаю из основкодировка?
Мое требование - как получить 128 за € или 131 за ƒ и аналогичные символы до 159, как указано в ascii-code.com в коде c.Мне нужно обрабатывать расширенные символы ascii, поэтому мне нужен код C, чтобы при обработке этих символов я получал 128 за € вместо 8364 или 131 за ƒ вместо 402. Если кто-то может помочь мне с примером кода C.