Значение ASCII и символы нескольких расширенных символов ASCII, таких как знак евро - PullRequest
0 голосов
/ 23 апреля 2019

Меня смущают два разных значения 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 &euro;</p>
<p>I will display &#8364;</p>
<p>I will display &#128;</p>
<p>I will display &#x0080;</p>
<p>I will display &#x20AC;</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.

...