Я искал решение на весь этот день. И вот те выводы, которые я сделал:
Надеюсь, это поможет! :)
<div style="display: block; width: 100px; height: 20px; overflow: hidden;">
<button style="width: 110px; height: 30px; position: relative; top: -5px; left: -5px;"><a href="javascript: void(0)">Upload File</a></button>
<input type="file" id="upload_input" name="upload" style="font-size: 50px; width: 120px; opacity: 0; filter:alpha(opacity=0); position: relative; top: -40px;; left: -20px" />
</div>
UTF-8 имеет преимущество в случае, где символы ASCII представляют большинство символов в блоке текста, потому что UTF-8 кодирует все символы в 8 битов (как ASCII). Это также выгодно в этом, файл UTF-8, содержащий только символы ASCII, имеет то же кодирование ASCII-файлом.
UTF-16 лучше, где ASCII не преобладает, так как он использует 2 байта за символ, прежде всего. UTF-8 начнет использовать 3 или больше байта для символов высшего порядка, где UTF-16 остается на уровне всего 2 байтов для большинства символов.
UTF-32 покроет все возможные символы в 4 байтах. Это делает это довольно чрезмерно увеличенным в размерах. Я не могу думать ни о каком преимуществе для использования его.
В UTF-32 все символы кодируются с 32 битами. Преимущество состоит в том, что можно легко вычислить длину строки. Недостаток - то, что для каждого ASCII символы Вы тратите впустую дополнительные три байта.
символы In UTF-8 имеют переменную длину, символы ASCII кодируются в одном байте (восемь битов), большинство западных специальных символов кодируется или в двух байтах или в трех байтах (например, в‚ ¬ составляет три байта), и более экзотические символы могут взять до четырех байтов. Ясный недостаток, это априорно Вы не можете вычислить длину строки. Но это - партия взятий меньше байтов для кодирования латинского (английского) текста алфавита, по сравнению с UTF-32.
UTF-16 является также переменной длиной. Символы кодируются или в двух байтах или в четырех байтах. Я действительно не вижу точку. Это имеет недостаток того, чтобы быть переменной длиной, но не имеет преимущества сохранения такого же количества пространства как UTF-8.
Из тех трех, ясно UTF-8 наиболее широко распространение.
Как упомянуто, различием является, прежде всего, размер основных переменных, которые в каждом случае становятся больше, чтобы позволить большему количеству символов быть представленным.
Однако шрифты, кодирование и вещи являются злобно сложными (излишне?), таким образом, большая ссылка необходима для заполнения более подробно:
http://www.cs.tut.fi/~jkorpela/chars.html#ascii
не ожидает понимать все это, но если Вы не хотите иметь проблемы позже, стоит изучить столько, сколько Вы можете, уже в Вас может (или просто то, чтобы заставлять кого-то еще уладить его для Вас).
Paul.
UTF-8 переменный 1 - 4 байты.
UTF-16 переменный 2 или 4 байты.
UTF-32 фиксируется 4 байты.
В зависимости от Вашей среды разработки у Вас даже не может быть выбора, что кодирование Вашего типа данных String будет использовать внутренне.
, Но для того, чтобы сохранить и обмениваться данными я всегда использовал бы UTF-8, если у Вас есть выбор. Если у Вас будут главным образом данные ASCII, то это даст Вам самый маленький объем данных для передачи, в то время как все еще способность закодировать все. Оптимизация для наименьшего количества ввода-вывода является способом пойти на современные машины.
Unicode определяет единственный огромный набор символов, присваивая одно уникальное целочисленное значение каждому графическому символу (который является основным упрощением и не на самом деле верен, но это достаточно близко в целях этого вопроса). UTF-8/16/32 просто различные способы закодировать это.
Короче говоря, UTF-32 использует 32-разрядные значения для каждого символа. Это позволяет им использовать код фиксированной ширины для каждого символа.
использование UTF-16, 16-разрядное по умолчанию, но который только дает Вам 65k возможные символы, который нигде не является около достаточно для полного набора Unicode. Таким образом, некоторые символы используют пар 16-разрядных значений.
И UTF-8 использует 8-разрядные значения по умолчанию, что означает, что 127 первых значений являются однобайтовыми символами фиксированной ширины (старший значащий бит используется, чтобы показать, что это - запуск многобайтовой последовательности, оставляя 7 битов для фактического символьного значения). Все другие символы кодируются как последовательности до 4 байтов (если не изменяет память).
И это приводит нас к преимуществам. Любой символ ASCII непосредственно совместим с UTF-8, таким образом, для обновления приложений прежней версии, UTF-8 является общим и очевидным выбором. Почти во всех случаях это будет также использовать наименьшее количество памяти. С другой стороны, Вы не можете сделать гарантии о ширине символа. Это может быть 1, 2, 3 или 4 широкие символа, который делает обработку строк трудной.
UTF-32 противоположен, он использует большую часть памяти (каждый символ является фиксированным 4 байта шириной), но с другой стороны, Вы знаете , что каждый символ имеет эту точную длину, таким образом, обработка строк становится намного более простой. Можно вычислить количество символов в строке просто от длины в байтах строки. Вы не можете сделать этого с UTF-8.
UTF-16 является компромиссом. Это позволяет большинство , символы вписываются в фиксированную ширину 16-разрядное значение. Таким образом, пока у Вас нет китайских символов, музыкальных нот или некоторых других, можно предположить, что каждый символ 16 битов шириной. Это использует меньше памяти, чем UTF-32. Но это до некоторой степени "хуже из обоих миров". Это почти всегда использует больше памяти, чем UTF-8, и это все еще не избегает проблемы что эпидемии UTF-8 (символы переменной длины).
Наконец, часто полезно просто пойти с какой поддержка платформ. Windows использует UTF-16 внутренне, таким образом, в Windows, который является очевидным выбором.
Linux варьируется немного, но они обычно используют UTF-8 для всего, что совместимо Unicode.
Так короткий ответ: Все три кодировки могут закодировать тот же набор символов, но они представляют каждый символ как различные последовательности байта.
Короче говоря: