UTF-8 в порядке, да. Он может кодировать любую кодовую точку в стандарте Unicode.
Отредактировано для добавления
Чтобы сделать ответ более полным, ваш реалистичный выбор:
У каждого есть компромиссы и преимущества.
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) для повышения эффективности и простоты кода.