wchar_t необходим для поддержки unicode?

wchar_t ввести требуемый для поддержки unicode? Если не тогда какой смысл этого многобайтового типа? Почему Вы использовали бы wchar_t, когда Вы могли выполнить то же самое с char?

29
задан zer0stimulus 13 February 2010 в 23:32
поделиться

7 ответов

Технически нет. Юникод - это стандарт, который определяет кодовые точки и не требует определенной кодировки.

Таким образом, вы можете использовать Unicode с кодировкой UTF-8, и тогда все будет помещено в одну или короткую последовательность объектов char , и она даже будет иметь нулевой символ в конце.

Проблема с UTF-8 и UTF-16 заключается в том, что s [i] больше не обязательно является символом, это может быть просто его часть, тогда как с достаточно широкими символами вы можете сохранить абстракция о том, что s [i] является одним символом, хотя она не делает строк фиксированной длины при различных преобразованиях.

32-битные целые числа, по крайней мере, достаточно широки, чтобы решить проблему с кодовой точкой, но они по-прежнему не обрабатывают угловые случаи, например, преобразование чего-либо в верхний регистр может изменить количество символов.

Получается, что проблема x [i] не решена полностью даже с помощью char32_t, а другие кодировки создают плохие форматы файлов.

Таким образом, ваша подразумеваемая точка вполне верна: wchar_t - это сбой, отчасти потому, что Windows сделала его только 16-битным, а отчасти потому, что он не решил все проблемы и был ужасно несовместим с байтом. абстракция потока.

33
ответ дан 28 November 2019 в 01:20
поделиться

wchar_t абсолютно НЕ требуется для Unicode. Например, UTF-8 поддерживает обратную совместимость с ASCII и использует простой 8-битный char . wchar_t в основном обеспечивает поддержку так называемых многобайтовых символов или практически любого набора символов, который закодирован с использованием большего, чем sizeof (char) .

5
ответ дан 28 November 2019 в 01:20
поделиться

Будьте осторожны, wchar_t часто состоит из 16 бит, чего недостаточно для хранения всех символов Юникода, и это плохой выбор для данных в UTF_8, например

3
ответ дан 28 November 2019 в 01:20
поделиться

Вам абсолютно не нужен wchar_t для поддержки Unicode в программном обеспечении, на самом деле использование wchar_t еще больше усложняет задачу, потому что вы не знаете, является ли «широкая строка» UTF-16. или UTF-32 - это зависит от ОС: под windows utf-16 все остальные utf-32.

Однако utf-8 позволяет легко писать программы с поддержкой Unicode (*)

См .: https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful

(*) Примечание: под Windows вам все равно придется использовать wchar_t , потому что он не поддерживает локали utf-8, поэтому для программирования Windows с поддержкой Unicode вам придется использовать API на основе wchar.

8
ответ дан 28 November 2019 в 01:20
поделиться

char обычно представляет собой один байт. ( sizeof (char) должен быть равен 1).

wchar_t был добавлен в язык специально для поддержки многобайтовых символов.

0
ответ дан 28 November 2019 в 01:20
поделиться

wchar_t не требуется. Даже не гарантируется наличие определенной кодировки. Дело в том, чтобы предоставить тип данных, который представляет широкие символы, присущие вашей системе, аналогично char, представляющему собственные символы. В Windows, например, вы можете использовать wchar_t для доступа к функциям Win32 API для широких символов.

3
ответ дан 28 November 2019 в 01:20
поделиться