2013-04-02 3 views
0

Может кто-нибудь, пожалуйста, скажите мне, что будет эквивалентом Unicode для «(char)»?C++ unicode (или wstring?) Эквивалент для (char)

Для ASCII я всегда используется, например,

(char)(7) 

Теперь я хочу сделать то же самое, но для Unicode.

Но

(wchar_t)(7) 

не получилось, и WCHAR не существует.

Я хочу передать этот символ (возможно) Unicode функции, которая принимает wstring.

Или другими словами: Как я могу программно создать wstring из значения символа Юникода (например, 7 для TAB)?

+0

Не могли бы вы показать код, пожалуйста? Эти фрагменты не очень полезны. –

+2

«Не работает» недостаточно описания проблемы.Я не думаю, что у кого-то есть представление о том, что вы пытаетесь сделать. –

+0

C++ не поддерживает ASCII IIRC, но в C++ 11 'char' должен иметь возможность хранить 8-битный код UTF-8; есть также char16_t и char32_t (с по меньшей мере 16 и 32 бит соответственно). Обратите внимание, что один глиф может быть представлен несколькими кодовыми единицами UTF-8/-16, поэтому нет точного эквивалента 'char', интерпретируемого как символ ASCII. – dyp

ответ

3

Я хочу передать этот (возможно) символ Юникода функции, принимающей wstring.

Тогда вам нужно сделать wstring, так же, как вы бы сделать string из char, если вам необходимо передать ASCII-символ функции, принимающим string.

function(std::wstring(1, 7)); // length 1, filled with value 7 
0

Данные в памяти не хранятся в Юникоде. Unicode предоставляет уникальный номер для каждого (ну, много) символов, используемых на компьютерах.

В памяти символы кодируются: сопоставление значений байтов с номерами Unicode.

Какую кодировку вы используете?

  • UTF-8: Каждый символ отображается в последовательности 1, 2, 3, 4, 5 или 6 байтов.
  • UTF-16: Каждый символ сопоставляется с последовательностью 2 или 4 байта.
  • UCS-2: неполное отображение большинства символов в последовательность из 2 байтов.
  • UTF-32: Каждый символ отображается в последовательность из 4 байтов.

wchar_t в win32 16-битные и символы, как ожидается, должны быть закодированы в UCS-2 UTF-16.

wchar_t on most * NIXes 32-бит, и ожидается, что символы будут закодированы в UTF-32.

UPDATE

Да, похоже, я старый. Моя последняя работа была в VS2005, и все еще были ссылки на UCS-2 как внутренняя кодировка, но я думаю, что даже это было уже устаревшим.

+0

Woah, вы путешествуете во времени? Если нет, то почему вы говорите о поведении с последнего тысячелетия? Windows теперь использует UTF-16 для «времени». –

+0

Функции, например. из SDK Windows может ожидать, что строки 'wchar_t' будут закодированы, но я думаю, что они предпочли бы, чтобы они были закодированы в UTF-16. – dyp

+0

UTF-16 используется для текста в OS API в Microsoft Windows 2000/XP/2003/Vista/CE. Старые системы Windows NT (до Windows 2000) поддерживают только UCS-2. –

Смежные вопросы