Какую кодировку символов следует использовать для веб-страницы, содержащей в основном арабский текст? 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.