Ну, во-первых, Unicode не является кодировкой.Это стандарт для присвоения кодовых знаков каждому символу на каждом языке.Эти кодовые точки являются целыми числами;сколько байтов они занимают, зависит от конкретной кодировки.Наиболее распространенными кодировками Unicode являются UTF-8 и UTF-16.
Подводя итог:
- ISO 8859-6 использует 1 байт для каждого арабского символа, но не поддерживает "Арабские формы представления ", а также символы из любого другого сценария, кроме ASCII.
- UTF-8 использует 2 байта для каждого арабского символа и 3 байта для" арабских форм представления ".
- UTF-16использует 2 байта для каждого арабского символа, включая «арабские формы представления».
Я буду использовать два примера: 'ح' (U + 062D) и 'ﻰ' (U + FEF0).Эти числа представляют собой шестнадцатеричные коды, представляющие кодовую точку Unicode для каждого из этих символов.
В ISO 8859-6 большинство арабских символов занимают всего один байт, поскольку эта кодировка предназначена для арабского языка.Например, символ 'ح' (U + 062D) кодируется как однобайтовый "CD", как вы можете видеть из таблицы статьи в Википедии .Символ «ﻰ» (U + FEF0) указан как «Форма представления на арабском языке», поэтому я предполагаю, что это объясняет, почему он вообще не фигурирует в ISO 8859-6 (вы не можете кодировать этот символ в этой кодировке).
Существует два очень распространенных кодировки Unicode, которые позволяют кодировать все символы: UTF-8 и UTF-16 .У них немного другое применение.UTF-8 использует один байт для символов ASCII, от 2 до 3 байтов для основных символов (включая весь арабский) и 4 байта для других символов.UTF-16 использует два байта для основных символов и 4 байта для других символов.В общем, если вы используете много ASCII, UTF-8 лучше.Для международного текста лучше использовать UTF-16.
В UTF-8 «ح» (U + 062D) кодируется как двухбайтовая последовательность «D8 AD», а «ﻰ» (U + FEF0) кодируется как 3-байтовая последовательность «EF BB B0».В основном символы между U + 0080 и U + 07FF используют 2 байта, а символы между U + 07FF и U + FFFF используют 3 байта.Таким образом, все основные арабские и арабские дополнительные символы используют 2 байта, тогда как арабские формы представления используют 3 байта.
В UTF-16 «ح» (U + 062D) кодируется как 2-байтовая последовательность ».2D 06 ", тогда как 'ﻰ' (U + FEF0) кодируется как 2-байтовая последовательность" F0 FE ".В UTF-16 все арабские символы составляют два байта.Это дополнительно осложняется порядком байтов.Обратите внимание, что байты в UTF-16 - это просто кодовые точки, в которых две части поменялись местами.Не менее правильной кодировкой является «06 2D» для первого и «FE F0» для второго.
Таким образом, я бы обычно рекомендовал UTF-8, поскольку он однозначный и очень хорошо поддерживает текст ASCII.Арабские символы имеют 2 байта в любой кодировке (если вы не используете «формы представления»).Вы можете использовать ISO 8859-6, если вы используете только символы ASCII и арабские символы, и ничего больше, и это сэкономит вам немного места, но обычно это того не стоит, так как сломается, как только появятся другие символы,UTF-8 и UTF-16 поддерживают все символы в Unicode.