Строковый терминатор UTF-16 - PullRequest
12 голосов
/ 08 мая 2011

Какова последовательность конца строки для строки UTF-16?

EDIT:

Позвольте мне перефразировать вопрос в попытке уточнить. Как работает звонок на wcslen()?

Ответы [ 3 ]

15 голосов
/ 08 мая 2011

Unicode не определяет терминаторы строки. Ваша среда или язык делает. Например, строки C используют 0x0 в качестве ограничителя строки, а также в строках .NET, где для хранения длины строки используется отдельное значение в классе String.

Чтобы ответить на ваш второй вопрос, wcslen ищет завершающий символ L'\0'. Что как Я прочитал , это любая длина 0x00 байтов, в зависимости от компилятора, но, скорее всего, будет двухбайтовой последовательностью 0x00 0x00, если вы используете UTF-16 кодировка U + 0000, 'NUL' )

5 голосов
/ 08 мая 2011

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'

4 голосов
/ 08 мая 2011

Там нет ни одного.Строковые терминаторы не являются частью кодировки.

Например, если у вас есть строка ab, она будет кодирована в UTF-16 со следующей последовательностью байтов: 61 00 62 00.И если бы у вас было 大家, вы бы получили 27-59-B6-5B.Так что вы не видите предопределенной последовательности терминатора.

...