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

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

utf-8 хорошо?

14
задан Paul D. Waite 8 June 2010 в 10:23
поделиться

4 ответа

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


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

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

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

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

16
ответ дан 1 December 2019 в 07:27
поделиться

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

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

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

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

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

2
ответ дан 1 December 2019 в 07:27
поделиться

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


Отредактировано для добавления

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

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

Каждый из них имеет свои недостатки и преимущества.

UTF-8

Как отмечает Джо Гаутерин, 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 в качестве внешнего формата (потому что все его поддерживают) для хранения, передачи и т.д., если только вы действительно не видите преимущества в размере с UTF-16. Таким образом, когда вы читаете строку из внешнего мира, она будет UTF-8, и когда вы передаете ее во внешний мир, она тоже будет UTF-8. Однако внутри вашего программного обеспечения, если у вас нет привычки работать с огромными строками (в этом случае я бы рекомендовал использовать различные структуры данных!), я бы рекомендовал использовать UTF-16 или UTF-32 (в зависимости от того, есть ли проблемы с кодировкой переменной длины в ваших данных UTF-16) для эффективности скорости и простоты кода.

8
ответ дан 1 December 2019 в 07:27
поделиться

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

1. Windows-1256

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

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

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

2. UTF-8

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

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

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

10
ответ дан 1 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: