я должен использовать utf-8 или utf-16 или utf-32 для моих многоязычных cms? - PullRequest
1 голос
/ 17 ноября 2011

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

Ответы [ 4 ]

2 голосов
/ 17 ноября 2011

Все кодировки UTF могут представлять одинаковый диапазон кодовых точек (от 0 до 0x10FFFF). Таким образом, один и тот же символ может быть закодирован любым из них.

Могут ли они быть "отображены" - это совершенно другой вопрос. Это не имеет ничего общего с кодировкой и функцией используемого семейства шрифтов. Я не уверен, что у любого шрифта есть глифы для каждого кода Unicode. Но я предполагаю, что вы имели в виду «представленный».

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

1 голос
/ 17 ноября 2011

Есть ли какой-либо символ, который один из них не может представить?

В теории: Нет.

Все эти форматы могут представлять все кодовые точки Unicode.

На практике: зависит.

Windows API использует UCS-2 (который в значительной степени является первым блоком UTF-16) и не всегда правильно обрабатывает суррогаты. Таким образом, вы можете захотеть использовать UTF-16, чтобы ваша программа работала как можно более «нормально» по сравнению с другими программами, вместо того, чтобы усекать высокоуровневые кодовые точки UTF-32 вручную.

Что-нибудь еще?

Да: используйте UTF-8!

Он не имеет порядка байтов, поэтому вы избегаете проблем с порядком байтов, которые вызывают боль в задней части.
Конечно, если вы работаете в Windows, вам нужно конвертировать в UTF-16 перед их использованием.

0 голосов
/ 27 марта 2016

1) UTF-8 может быть обратно совместим с ASCII для обычных английских символов, это может быть преимуществом, когда у вашего клиента только английские символы.

2) UTF-8 хорош в экономии пропускной способности сети, еслиу вас ASCII-символы больше, чем неанглийские символы.

3) UTF-16 будет хорошо, если у вас будет больше неанглийских символов в плане экономии места на диске.

Я предлагаю использоватьUTF-8 на основе № 1 выше.

0 голосов
/ 17 ноября 2011

UTF-8, UTF-16 и UTF-32 могут использоваться для представления всех точек данных Unicode.Так что нет, нет специальных символов, которые могут быть представлены в UTF-32, а не в UTF-8.

...