Терминатор строк UTF-16
Что такое последовательность терминаторов строк для строки UTF-16?
EDIT:
Позвольте мне перефразировать этот вопрос в попытке прояснить. Как работает вызов wcslen()
?
Ответы
Ответ 1
Unicode не определяет терминаторы строки. Ваша среда или язык делает. Например, строки C используют 0x0 в качестве ограничителя строки, а также в строках .NET, где для хранения длины строки используется отдельное значение в классе String
.
Чтобы ответить на ваш второй вопрос, wcslen
ищет завершающий символ L'\0'
. Как я понимаю, это любая длина 0x00
байт, в зависимости от компилятора, но, скорее всего, это будет двухбайтовая последовательность 0x00
0x00
если вы используете UTF-16 (кодировка U + 0000, 'NUL')
Ответ 2
7.24.4.6.1 Функция wcslen (из Стандарта)
...
[#3] The wcslen function returns the number of wide
characters that precede the terminating null wide character.
И широкий нулевой символ L'\0'
Ответ 3
Нет. Строковые терминаторы не являются частью кодировки.
Например, если у вас была строка ab
, она была бы закодирована в UTF-16 со следующей последовательностью байтов: 61 00 62 00
. И если у вас 大家
, вы получите 27-59-B6-5B
. Так как вы не видите предопределенной последовательности терминатора.