Какую кодировку символов следует использовать для веб-страницы, содержащей в основном арабский текст? Utf-8 в порядке?

какую кодировку символов я должен использовать для веб-страницы, содержащей в основном арабский текст?

utf-8 в порядке?

5 ответов


UTF-8 может хранить полный диапазон Unicode, поэтому его можно использовать для арабского языка.


однако, если вам интересно, какая кодировка будет наиболее эффективной:

все арабские символы могут быть закодированы с помощью одной единицы кода UTF-16 (2 байта), но они могут принимать либо 2, либо 3 единицы кода UTF-8 (1 байт каждый), поэтому, если бы вы просто кодировали арабский, UTF-16 был бы более эффективным вариантом.

однако вы не просто кодируете арабский - вы кодируете значительное количество символов, которые могут быть сохранены в одном байте в UTF-8, но взять два байта в UTF-16; все символы кодировки html <,&,>,= и все имена элементов html.

это компромисс, и, если вы не имеете дело с огромными документами, это не имеет значения.


Я разрабатываю в основном арабские веб-сайты, и это две кодировки, которые я использую:

1. Windows-1256

Это наиболее распространенная кодировка арабских веб-сайтов. Он работает в большинстве случаев (90%) для арабских пользователей.

вот один из крупнейших арабских форумов веб-разработки:http://traidnt.net/vb/. Вы можете видеть, что они используют эту кодировку.

проблема с этой кодировкой заключается в том, что если вы разрабатываете веб-сайт для международное использование, эта кодировка не будет работать с каждым пользователем, и они будут видеть тарабарщину вместо контента.

2. UTF-8

эта кодировка решает предыдущую проблему, а также работает в URL-адресах. Я имею в виду, если вы хотите иметь арабские слова в url-адресе, вам нужно, чтобы они были в utf-8, или это не сработает.

недостатком этой кодировки является то, что если вы собираетесь сохранить арабский контент в базе данных (например, MySql), используя эту кодировку (поэтому база данных также будет кодируется с помощью utf-8) его размер будет вдвое больше, чем если бы он был закодирован с помощью windows-1256 (поэтому база данных будет закодирована с помощью latin-1).

Я предлагаю пойти с utf-8, Если вы можете позволить себе увеличение размера.


UTF-8 в порядке, да. Он может кодировать любую кодовую точку в стандарте Unicode.


редактировать, чтобы добавить

чтобы сделать ответ более полным, ваш реалистичные варианты:

  • UTF-8
  • UTF-16
  • UTF-32

каждый поставляется с компромиссами и преимуществами.

UTF-8

As Джо Gauterin указывает вне, UTF-8 очень эффективно для европейца тексты, но могут стать все более неэффективными, чем "дальше"от латинского алфавита. Если ваш текст полностью арабский, он будет больше, чем эквивалентный текст в UTF-16. Это редко проблема, однако, на практике в эти дни дешевой и обильной ОЗУ, если у вас нет много текста, чтобы иметь дело. Большая проблема заключается в том, что переменная длина кодировки затрудняет и замедляет некоторые строковые операции. Например, вы не можете легко получить пятый арабский символ в строке потому что некоторые символы могут быть длиной 1 байт (скажем, пунктуация), а другие-два или три. Это делает фактическим обработка строк медленных и подверженных ошибкам.

с другой стороны, UTF-8, вероятно, ваш лучший выбор, если вы делаете много смешанного Европейского/арабского текста. Чем больше Европейского текста в ваших документах, тем лучше будет выбор UTF-8.

UTF-16

UTF-16 даст вам лучшую эффективность пространства, чем UTF-8, Если вы используете преимущественно арабский текст. Однако я не знаю об арабских кодовых точках, поэтому я не знаю, рискуете ли вы иметь кодировки переменной длины здесь. (Я предполагаю, что это не проблема, однако.) Если у вас действительно есть кодировки переменной длины, здесь также применяются все проблемы обработки строк UTF-8. Если нет-никаких проблем.

с другой стороны, если вы смешали европейские и арабские тексты, UTF-16 будет менее эффективным. Также, если вы окажетесь расширении текстовые формы к другим текстам, таким как, скажем, китайский, вы определенно вернетесь к формам переменной длины и связанным с ними проблемам.

UTF-32

UTF-32 в основном удвоит ваши требования к пространству. С другой стороны, он имеет постоянный размер для всех известных (и, вероятно, неизвестных;) форм сценариев. Для обработки необработанных строк это ваш самый быстрый и лучший вариант без проблем, которые вызовет кодировка переменной длины. (Это предполагает, что у вас есть библиотека строк, которая знает о 32-битные символы, естественно.)

рекомендация

моя собственная рекомендация заключается в том, что вы используете UTF-8 в качестве внешнего формата (потому что все его поддерживают) для хранения, передачи и т. д. если только ты ... --42-->действительно см. Размер-мудрый пользу с UTF-16. Таким образом, каждый раз, когда вы читаете строку из внешнего мира, это будет UTF-8, и каждый раз, когда вы помещаете ее во внешний мир, это тоже будет UTF-8. Однако в вашем программном обеспечении, если вы не привыкли манипулирование массивными строками (в этом случае я бы рекомендовал разные структуры данных в любом случае!) Я бы рекомендовал использовать UTF-16 или UTF-32 вместо этого (в зависимости от того, есть ли какие-либо проблемы с кодированием переменной длины в ваших данных UTF-16) для эффективности скорости и простоты кода.


UTF-8-самый простой способ, так как он будет работать практически со всем:

UTF-8 может кодировать любые Unicode характер. Файлы в разных языки могут отображаться правильно без необходимости выбирать правильный кодовая страница или шрифт. Например Китайский и арабский могут быть в одном и том же текст без специальных кодов, переключите кодировку. (via Википедия)

конечно имейте в виду, что:

кодировка UTF-8 часто занимает больше места, чем кодирования для одной или нескольких языки. Латинские буквы с диакритикой и символы из другого алфавита сценарии обычно занимают один байт на характер в соответствующем многобайтовое кодирование, но возьмите два UTF-8. Восточноазиатские сценарии в целом есть два байта на символ в их многобайтовые кодировки занимают три байт на символ в UTF-8.

... но в большинстве случаев это не большая проблема. Это станьте им, если начнете обрабатывать огромные документы.


UTF-8 часто занимает больше места, чем кодировка для одного или нескольких языков. Латинские буквы с диакритикой и символы из других алфавитных сценариев обычно принимают один байт на символ в соответствующей многобайтовой кодировке, но принимают два в UTF-8. Восточноазиатские скрипты обычно имеют два байта на символ в своих многобайтовых кодировках, но берут три байта на символ в UTF-8.