Как уже говорилось, UTF-8 является стандартом кодирования в Unicode. UTF-8 использует переменное число байтов для кодирования всех существующих символов Юникода.
Все символы ASCII представлены как есть, так что файлы ASCII можно читать с дальнейшими действиями. Как только байт в потоке имеет свой 8-й бит (старший бит> 127), это заставляет читателя объединить его со следующим байтом, пока он не станет <128. Комбинация считается 1 символом. </p>
В LATIN-1 (ANSII) есть символы, которые кодируются с использованием двух символов: например, é кодируется как e и ´. Длина ('é') поэтому равна 2.
Windows использует UTF-16 для внутреннего использования, что ограничивает кодируемые символы 64 КБ, что далеко не все символы Unicde. UTF-32 в настоящее время допускает все символы, но также искусственно ограничен. И оба не совместимы вверх с ASCII, так как имеют ведущие нули:
A = ASCII h41 = UTF-8 h41 = UTF-16 h0041 = UTF-32 h00000041
Есть также маленькие и большие порядковые кодировки:
A = UTF-16 big endian h0041 = UTF-16 little endian h4100
Представьте себе использование UTF16 или UTF32 для сохранения ваших файлов. Они будут (для текстовых файлов) в два или четыре раза больше по сравнению с ASCII и UTF-8 (UTF-8, если используются только символы ascii). UTF-8 не только учитывает все символы в стандарте Unicode, даже для будущих улучшений, но также эффективно экономит место.
Обычно первые два байта файла, BOM или Byte Order Marker, сообщают вам, какой стандарт кодирования используется. Если опущено, XML и StreamRedaer используют UTF-8, как вы узнали. Это опять-таки имеет значение, поскольку файлы ASCII не имеют спецификации и, следовательно, в большинстве случаев читаются правильно. Это может быть не так для файлов, использующих весь LATIN-1.