Как я могу преобразовать десятичный код символа в строку Unicode в C ++? - PullRequest
1 голос
/ 30 января 2010

Как я могу преобразовать десятичный код символа в строку Unicode в C ++? Например, я даю ему целое число 241, то есть "& ntilde;" испанское письмо, и я хочу преобразовать его в строку Unicode.

Ответы [ 2 ]

1 голос
/ 30 января 2010

Если исходным набором символов является ISO 8859-1 или 8859-15 (оба из которых имеют LATIN SMALL LETTER N WITH TILDE в кодовой точке 0xF1 = 241), тогда преобразование должно создать правильную кодировку для символа Unicode U + 00F1.

Теперь нам нужно знать, какую схему кодировки Unicode вы используете. Если вы используете UTF-8, вам понадобится результат:

 \xC3 \xB1

Если вы используете UTF-16 BE (big endian), вам необходимо:

\x00 \xF1

Если вы используете UTF-16 LE (little-endian), вам необходимо:

\xF1 \x00

Если вы используете UTF-32, вам нужно 4 байта вместо 2.

А если вам нужна строка, вам необходимо закодировать U + 0000 (NULL) в виде следующего символа.

Если вы не знаете, какая форма вам нужна, у вас большие проблемы; чтобы использовать Unicode, вам нужно понять кое-что о том, как кодируются различные формы. Ваша библиотека может избавить вас от многих проблем, связанных с пониманием, но, в конечном счете, вам нужно знать как минимум минимум о Unicode .

0 голосов
/ 17 августа 2012

Если код символа определяется во время выполнения, и вы не можете использовать литералы, такие как , объясненный Джонатаном , вам необходимо положиться на свой инструментарий. Например, в Qt:

QString codepointToString(QString codepointDecimal) {
    int codepoint = codepointDecimal.toInt(); //TODO: check errors
    QChar character(codepoint);
    return QString(character);
}
...