Как отформатировать внешний USB-накопитель емкостью 4 ТБ для использования в LINUX (Ubuntu) и Mac OSX?

Некоторые языки, например китайский, могут быть написаны с использованием нескольких наборов символов, и оба они верны. У них есть более новый, упрощенный набор символов, а также более сложный, традиционный. Или монгольский, или сербский могут быть написаны как кириллицей, так и латиницей.

Кроме того, акцентированные символы, такие как ä, ö и подобные, во многих языках имеют разные коды в разных кодировках, хотя на экране они одинаковы. Таким образом, запись ä в файл означает, что вы записываете другую последовательность байтов в этот файл, если он закодирован с помощью utf8, как если бы он закодирован по другому стандарту (в моем примере его имя - кодировка iso8859-1).

Кроме того, существуют кодировки, которые могут поддерживать один или несколько языков. Например, iso8859-1 поддерживает большинство западноевропейских языков, iso8859-2 поддерживает центральные и восточноевропейские языки до тех пор, пока они не будут написаны латинским шрифтом. Ascii поддерживает только английский язык, но utf8 поддерживает почти все языки мира.

Таким образом, существует связь «многие ко многим» между языками и возможными кодировками: языки можно кодировать с помощью нескольких кодировок, и большинство кодировок можно использовать для нескольких языков.

Существует также отношение «многие ко многим» для совместимости кодирования: например, iso8859-2 обратно совместим с ascii, а ebcdic - нет.

Существует также отношение «многие ко многим» между совместимостью кодирования. Например, ebcdic можно преобразовать в ascii, а iso8859-2 - нет.

Итак, существует сложная сеть частично совместимых стандартов.Фактически используемая кодировка точно так же относится к локали, как и к языку. Таким образом, с ним нужно обращаться так же, как и с языком. Вот почему он обрабатывается с теми же переменными среды.

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

Но, по крайней мере, в glibc есть поддержка различных переменных окружения. Вот как выглядит вывод "locale" в одном из моих английских Linux:

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Как видите, существуют различные переменные среды LANG и LANGUAGE. К сожалению, это в основном для некоторой стандартной совместимости, и система, похоже, ей не следует.

Расширение:

Об истории: в древние времена почти все системы были на американском английском с кодировкой ASCII или EBCDIC. Поддержка многоязычного или множественного кодирования не была слышна, и если они были разработаны, они использовали специальные решения (например, путем перезаписи растровых изображений набора символов в системной прошивке). Также я разработал в то время поддержку символов latin2 для c64 примерно в 1988 году (я сделал доступными только некоторые символы latin2, но не кодовую страницу - в то время я даже не знал, что такое кодовые страницы)). Кодовые страницы были для них более поздним изобретением, первоначально для стандартизации аналогичных расширений для ascii.В мире мэйнфреймов использовался ebcdic, который по своей сути несовместим с ascii, аналогичное переключение произошло и (изначально ebcdic был разработан, чтобы сделать перфокарты легко читаемыми людьми, ascii нацелена на легкую обработку данных).

Все эти кодировки использовали 1 символ на 1 байт. В Linux поддержка нескольких языков началась в эпоху libc4 (начало девяностых). Unicode еще не существовал, это был новый и нереализованный стандарт, и все программное обеспечение было разработано с подозрением на 1 символ = 1 байт. Чтобы сделать UTF жизнеспособным, все они должны были быть существенно изменены, что явилось источником серьезных проблем следующего десятилетия.

Все языковые расширения использовали верхнюю половину байта (ascii определяет только 7 бит, поэтому место для ä, ö или кириллического / греческого скрипта было между 128-255). Таким образом, они были несовместимы друг с другом. Таким образом, в то время отношения между языками и кодовыми страницами были больше похожи на отношения один-к-одному, как у нынешнего «многие-ко-многим».

Таким образом, поддержка языка четко определяет также используемую кодовую страницу. Таким образом, не было поддержки разных кодовых страниц, даже кодовая страница, поскольку терминология была не очень принята. Вы можете себе представить, сколько проблем было вызвано в то время, когда win95 переключился с ibm850 из win31 на cp1251, в то время как большинство инструментов даже не знали о существовании кодовых страниц.

В Linux просто язык определялся двумя символами в переменной среды LANG и не более.Поддержка языковых диалектов (например, «pt_BR» для бразильского португальского языка вместо просто «pt») уже была независимым расширением для этого.

Необходимость поддержки одного и того же языка с несколькими оболочками была очень острой с utf8. Хотя проблема уже существовала в свое время (см. Сербский, что можно написать кириллицей, а также латинским шрифтом),это доставляло проблемы только некоторым небольшим языкам (насколько я знаю, сербы просто использовали латинский алфавит для всего). Таким образом, поддержка множественного кодирования была следующим шагом к непрерывному развитию. Таким образом, он следовал общим шаблонам: дальнейшее расширение языковой строки.

1
11.01.2017, 19:43
0 ответов

Теги

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