Читам http://ru.wikipedia.org/wiki/UTF-8, где Код (Text): 0x00000000…0x0000007F|0xxxxxxx |ASCII, в том числе английский алфавит, … 0x00000080…0x000007FF|110xxxxx 10xxxxxx|кириллица, расширенная латиница, арабский, … Я вот не пойму, почему каждая буква русского алфавита должна кодироваться двумя байтами!? Нет, принцип я понимаю. Я не понимаю ограничение!!! Почему целые слова из русских букв нельзя кодировать короче? Префиксно… Т.е.: Код (Text): 110xxxxx 10Буква1 110xxxxx 10Буква2 110xxxxx 10Буква3 кодировать как Код (Text): 110xxxxx 10Буква1 10Буква2 10Буква3 10Буква4 10Буква5 нельзя? Ведь при такой кодировке любое слово будет занимать нормальное число байт + 1 префиксный… А то читаю про IRC-сети и их нагрузку из-за UTF-8, а также и интернет страницы… Какой-то идиотизм прямо! Достало просто!
Paguo_86PK Нельзя. На самом деле буквы будут кодироваться не так как Вы написали, а так: 110Часть1Буквы1 10Часть2Буквы1 110Часть1Буквы2 10Часть2Буквы2 110Часть1Буквы3 10Часть2Буквы3 При этом Часть1 не будет одинаковой для всех букв, т.к. Часть2 может закодировать лишь 64 символа, а в русском алфавите 66 букв (если считать раздельно сточные/прописные).
Потому что кодировки с переменной длиной символа - гнуснейшее зло из самых глубин ада. Сотни, тысячи и миллионы программистов утрахаются считать, сколько памяти выделять под текстовый буфер и налепят по этому поводу гигабайты глюков. Не говоря уже о том, как чудесно всё это будет тормозить во имя экономии на спичках.
Кстати, кому-то из команды FreePascal, видимо, не хватало острых ощущений (то бишь геморроя с кулак), и они сделали WideString в UTF-8 вместо того, чтобы последовать примеру Embarcadero, где UnicodeString строго из 16-битных символов. И вот из-за этого подготовка к вызову CreateFileW там выглядит как злобное и безумное колдунство.