Создать Unicode из шестнадцатеричного числа в C ++ - PullRequest
0 голосов
/ 03 июля 2019

Моя цель - взять символ, представляющий символ британского фунта, и преобразовать его в эквивалент в юникоде в виде строки.

Вот мой код и вывод, пока что из моей тестовой программы:

#include <iostream>
#include <stdio.h>

int main()
{
    char x = 163;
    unsigned char ux = x;
    const char *str  = "\u00A3";

    printf("x: %d\n", x);
    printf("ux: %d %x\n", ux, ux);
    printf("str: %s\n", str);

    return 0;
}

Вывод

$ ./pound 
x: -93
ux: 163 a3
str: £

Моя цель - взять без знака char 0xA3 и поместить его встрока, представляющая представление британского фунта в юникоде: "\ u00A3"

1 Ответ

1 голос
/ 03 июля 2019

Какой именно у вас вопрос? В любом случае, вы говорите, что пишете на C ++, но используете char *, printf и stdlib.h, поэтому вы действительно пишете на C, а base C не поддерживает Unicode. Помните, что char в C - это не «символ», это просто байт, а char * не массив символов, это массив байтов. Когда вы печатаете строку «\ u00A3» в вашей программе примера, вы не печатаете символ Unicode, вы фактически печатаете эти буквенные байты, и ваш терминал помогает вам и интерпретирует их как символ Unicode. Тот факт, что он правильно печатает символ £, просто совпадение. Вы можете убедиться в этом сами. Если вы напечатаете в своем примере программы stf [0], вы должны просто увидеть символ "\".

Если вы хотите правильно использовать юникод в C, вам нужно использовать библиотеку. Есть из чего выбирать, и я не использовал ни одного из них, чтобы рекомендовать один. Или вам нужно использовать C ++ 11 или новее и использовать std :: wstring и friends. Но то, что вы делаете, не является реальным юникодом и не будет работать так, как вы ожидаете в долгосрочной перспективе.

...