Может ли UTF-8 кодировать 5 или 6-байтовые последовательности, позволяя кодировать все символы Юникода? Я получаю противоречивые стандарты. Мне нужно иметь возможность поддерживать каждый символ Unicode , а не только те, которые находятся в диапазоне U + 0000..U + 10FFFF.
(все цитаты из RFC 3629 )
Раздел 3:
В UTF-8 символы из диапазона U + 0000..U + 10FFFF (UTF-16
доступный диапазон) кодируются с использованием последовательностей от 1 до 4 октетов.
только октет "последовательности" из одного имеет бит высшего порядка, установленный в 0,
остальные 7 бит используются для кодирования номера символа. В
последовательность из n октетов, n> 1, исходный октет имеет n старшего порядка
биты установлены в 1, за которыми следует бит в 0. Остальные биты
этот октет содержит биты из номера символа, который будет
закодирован. Все следующие октеты имеют бит высшего порядка, установленный в
1 и следующий бит установлен в 0, оставляя 6 бит в каждом, чтобы содержать
биты от символа для кодирования.
То есть не все возможные символы могут быть закодированы с помощью UTF-8? Означает ли это, что я не могу кодировать символы из разных плоскостей, чем BMP?
Раздел 2:
Значения октетов C0, C1, F5-FF никогда не появляются.
Это означает, что мы не можем кодировать значения UTF-8 с 5 или 6 октетами (или даже некоторые с 4, которые не в вышеуказанном диапазоне)?
Раздел 12:
Ограничен диапазон символов до 0000-10FFFF (UTF-16
доступный диапазон).
Глядя на предыдущий RFC это подтверждает ... они уменьшили диапазон символов.
Раздел 10:
Другая проблема безопасности возникает при кодировании в UTF-8: ISO / IEC
10646 Описание UTF-8 позволяет кодировать номера символов до
U + 7FFFFFFF, получая последовательности до 6 байтов. Поэтому есть
риск переполнения буфера, если диапазон номеров символов не
явно ограничено U + 10FFFF или если размер буфера не учитывается
учитывать возможность 5- и 6-байтовых последовательностей.
То есть эти последовательности разрешены согласно определению ISO / IEC 10646, но не определению RFC 3629? Которому я должен следовать?
Заранее спасибо.