Character encoding (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Character encoding
. Дата последней синхронизации: 6 октября 2024. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Локали
Метод ввода
Кодировка
задаёт соответствие между байтами и человекочитаемыми символами. Самой распространённой кодировкой является
UTF-8
.
[1]
UTF-8
Терминал
В большинстве терминалов UTF-8 используется по умолчанию. Однако некоторые терминалы (например,
gnome-terminal
,
rxvt-unicode
) нужно запускать в окружении с локалью UTF-8, то есть установленная вами локаль должна оканчиваться на
.UTF-8
; смотрите раздел
Локали#Установка локали
.
xterm
— запустите с параметром
-u8
или пропишите
ресурс X
xterm*utf8: 2
.
Вставка символов Юникода
Смотрите
List of applications/Utilities#Text input
.
В
LibreOffice
есть встроенная таблица символов (
Вставка > Специальные символы
), которая также показывает код выбранного символа.
Клавиша Compose
: можно настроить XCompose для ввода специальных символов.
AltGr
позволяет получить доступ к дополнительным рядам со специальными символами, а также управляющими символами вроде
ZWNJ
и
RTL mark
.
Кодировка URL
В ссылках (
URI
) можно использовать только некоторые ASCII-символы; для остальных символов применяется
процентное кодирование
, из-за которого ссылки могут становиться длинными и нечитаемыми.
Firefox
умеет выполнять декодирование при копировании ссылки из адресной строки — для этого включите
browser.urlbar.decodeURLsOnCopy
через
about:config
. Также можно просто добавить пробел перед ссылкой, и тогда она скопируется в декодированном виде. В
Chromium
аналогичных способов нет, но можно выделить часть ссылки после
https://
и скопировать только её.
В командной строке можно использовать
python
для декодирования ссылки:
$ python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read().strip()))"
Решение проблем
Проблемы с кодировками обычно возникают, когда две программы обмениваются данными в разных кодировках, и из-за неправильной интерпретации передаваемых байтов возникают
кракозябры
.
Важно
Крайне рекомендуется использовать UTF-8 локаль. В противном случае преобразование из UTF-8 в кодировку локали, которая не использует Юникод, может привести к потере неподдерживаемых кодировкой символов.
Неправильная кодировка архива
В старых версиях Windows (XP, Vista, 7) Проводник создавал zip-архивы с использованием системной («ANSI») кодировки, зависящей от языка системы. Так как zip-архивы не хранят информацию о кодировке, при распаковке придётся указывать правильную кодировку вручную.
Для распаковки можно использовать
unzip
, который собирается в Arch с патчем, добавляющим поддержку указания кодировки. Например, для распаковки архива с использованием кодировки CP1251 (кириллица) можно использовать такую команду:
$ unzip -O CP1251
файл.zip
Если вы не знаете правильную кодировку, используйте опцию
-l
, чтобы посмотреть список файлов без распаковки, и пробуйте разные кодировки, пока имена файлов не станут читаемыми:
$ unzip -lO CP866
файл.zip
Японские версии Windows создают zip-архивы с кодировкой Shift-JIS (SJIS):
$ unzip -O shift-jis nihongo.zip
Китайские версии Windows создают zip-архивы с кодировкой GBK:
$ unzip -O gbk
файл
.zip
Также есть
unzip-natspec
AUR
, который автоматически выбирает кодировку, соответствующую текущей локали.
Неправильная кодировка имени файла
Если у вас есть файл, имя которого хранится в файловой системе не в кодировке UTF-8, можно использовать
convmv
для переименования файла одновременно с перекодированием его имени:
$ convmv -f
ИСХОДНАЯ_КОДИРОВКА
-t UTF-8 --nosmart
файл
Скорее всего вы не сможете ввести правильное имя файла вручную, потому что файловые менеджеры будут показывать знаки вопроса или квадраты; выполните команду
ls
в каталоге с проблемным файлом — она покажет имя файла в экранированном виде, которое вы сможете использовать в вашей командной оболочке.
По умолчанию
convmv
только показывает, что будет сделано, без фактического переименования. Когда вы подберёте правильную кодировку (для кириллицы скорее всего
CP1251
), добавьте опцию
--notest
, чтобы выполнить переименование.
По умолчанию
convmv
пропускает имена файлов, которые хранятся в файловой системе уже в кодировке UTF-8. Опция
--nosmart
позволяет принудительно выполнять перекодирование даже для таких файлов.
Команда
convmv --list
покажет список всех поддерживаемых кодировок.
Неправильная кодировка содержимого файла
Для перекодирования содержимого файла можно использовать
iconv
:
$ iconv -f
ИСХОДНАЯ_КОДИРОВКА
-t UTF-8 -o
новый-файл
исходный-файл
-f
задаёт кодировку, в которой находится исходный файл,
-t
— кодировку, в которую его нужно перекодировать, а
-o
— имя перекодированного файла, который будет создан. Список доступных кодировок можно посмотреть командой
iconv -l
.
Vim
Если используется UTF-8 локаль, при открытии файлов в других кодировках могут появляться кракозябры. Для решения можно прописать запасные кодировки в
vimrc
:
set fileencodings=utf8,cp936,gb18030,big5
Или можно явно задать
:set fileencoding=ansi
. Vim выполнит перекодирование через
iconv
автоматически. Смотрите
:h charset-conversion
.
Неправильная кодировка ID3 в файлах MP3
Можно выполнить перекодирование через
python-mutagen
или
mp3unicode
:
$ mid3iconv -e
ИСХОДНАЯ_КОДИРОВКА
XXX
.mp3
Если вносить изменения в файл нежелательно, можно изменить поведение плеера. Например, для плееров, которые используют бэкенд
GStreamer
(
Rhythmbox
, Totem), можно указать
переменную окружения
, прописав в ней список нужных кодировок через двоеточие:
export GST_ID3_TAG_ENCODING=CP1251:GBK:UTF-8:GB18030
В плеере Quod Libet откройте
Файл > Расширения > Расширенные настройки
(или
Файл > Настройки > Расширенное
в более новой версии
quodlibet-git
AUR
), нажмите
Я знаю, что делаю!
и пропишите список нужных кодировок через пробел в поле
ID3 encodings
. Или можно вручную отредактировать файл настроек:
~/.config/quodlibet/config
...
[editing]
id3encoding = cp1251
...
Примечание
Quod Libet поддерживает UTF-8 по умолчанию.
Неправильная кодировка при монтировании
Параметр монтирования
iocharset
позволяет указать кодировку, в которой будут выводиться имена файлов. Его можно прописать в файле
fstab
. Пример для локали, использующей кодировку UTF-8:
/etc/fstab
...
/dev/sdxx /media/win ntfs defaults,iocharset=utf8 0 0
Для локали GBK:
/etc/fstab
...
/dev/sdxx /media/win ntfs defaults,iocharset=cp936 0 0
...
Неправильная кодировка Samba
При использовании Arch в качестве сервера
Samba
для решения проблем с кодировками у Windows-клиентов может понадобиться добавить в
/etc/samba/smb.conf
:
/etc/samba/smb.conf
...
unix charset=gb2312
...
Неправильная кодировка FTP
Если вы используете UTF-8 локаль, файл, скачанный с FTP-сервера, не использующего Юникод, может оказаться с кракозябрами в имени. Для lftp решить проблему можно путём добавления таких настроек:
.lftp/rc
...
set ftp:charset "gbk"
set file:charset "UTF-8"
...
Для gftp:
.gftp/gftprc
...
remote_charsets=gb2312
...
Однако имя загруженного файла по-прежнему с кракозябрами. Для решения можно пропатчить gftp:
https://www.teatime.com.tw/%7Etommy/linux/gftp_remote_charsets.patch