Вопрос или проблема
Я пытаюсь извлечь список китайских иероглифов из https://lingua.mtsu.edu/chinese-computing/statistics/char/list.php?Which=MO, чтобы сделать bash-скрипт. Однако, когда я выполнил
curl -o list.txt https://lingua.mtsu.edu/chinese-computing/statistics/char/list.php?Which=MO
Я понял, что curl использует кодировку UTF-8 вместо кодировки GB2312, которую использует сайт, из-за чего китайские иероглифы превращаются в случайные символы. Итак, мой вопрос заключается в следующем: как мне изменить кодировку, которую использует curl для загрузки HTML?
вывод команды
curl --version
curl 8.0.1 (x86_64-pc-linux-gnu) libcurl/8.0.1 OpenSSL/3.0.8 zlib/1.2.13 brotli/1.0.9 zstd/1.5.5 libidn2/2.3.4 libpsl/0.21.2 (+libidn2/2.3.4) libssh2/1.10.0 nghttp2/1.52.0
Дата выпуска: [не выпущено]
Протоколы: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Особенности: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-прокси IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL потокобезопасные TLS-SRP UnixSockets zstd
(Я заметил, что в этом отсутствует функция CharConv
, упомянутая в справочной странице)
Вы здесь путаете вещи.
Файл на самом деле содержит байты именно в том виде, в котором они были получены. curl
не производит никаких преобразований. То, что разные методы отображения файла выбирают разные кодировки для интерпретации этих байт, не имеет ничего общего с curl!
Ваш браузер, когда вы впервые открываете сайт, вероятно, получает HTTP-заголовок, который информирует его о кодировке, которую следует использовать. Этот заголовок не является частью содержимого и, следовательно, не может быть сохранен в файле, содержащем HTML.
Ответ или решение
Когда вы пытаетесь извлечь список китайских иероглифов с помощью команды curl
и замечаете, что полученные символы искажены, это может вызывать путаницу относительно кодировок. Давайте разберем, как использовать curl
для правильной работы с различными кодировками и понять, что на самом деле происходит.
1. Основы работы с curl
Команда curl
используется для передачи данных с одним сервером на другой с использованием различных протоколов, включая HTTP и HTTPS. При этом она не изменяет содержимое загружаемого файла, а просто сохраняет байты так, как они поступили от сервера.
2. Проблема с кодировкой
Ваш случай показывает, что вы пытаетесь скачать контент, закодированный в GB2312
, а не UTF-8
. По умолчанию curl
не выполняет преобразование кодировки и не может самостоятельно определить, в какой кодировке представлен текст. Это делает обязательным рассмотрение других методов обработки загружаемых данных.
3. Как получить данные в нужной кодировке
Чтобы правильно сохранить данные, необходимо обратить внимание на HTTP заголовки, которые посылает сервер. В частности, заголовок Content-Type
определяет кодировку страницы. В вашем случае, браузер корректно интерпретирует заголовок и отображает данные, в то время как curl
просто скачивает байты.
Для скачивания HTML-контента с правильной кодировкой, вы можете использовать следующую команду curl
:
curl -L -o list.txt https://lingua.mtsu.edu/chinese-computing/statistics/char/list.php?Which=MO
4. Конвертация файла в нужную кодировку
После загрузки файла с данными вы можете конвертировать его в нужную кодировку с помощью утилиты iconv
, доступной на большинстве UNIX-подобных систем. Например:
iconv -f GB2312 -t UTF-8 list.txt -o list_utf8.txt
Этот пример предполагает, что файл list.txt
содержит данные в GB2312
. Вы заменяете UTF-8
на ту кодировку, которую вам нужно получить.
5. Проверка результата
После выполнения указанных шагов проверьте полученный файл list_utf8.txt
. Вы можете использовать текстовый редактор или команду cat
, чтобы убедиться, что иероглифы отображаются корректно.
Заключение
Работа с кодировками может быть сложной задачей, особенно при использовании командной строки. Понимание процессов кодировки и преобразования поможет избежать проблем с отображением данных. Следуя приведенным рекомендациям, вы сможете корректно сохранить и обработать китайские символы, полученные с веб-сайта.
Это позволит вам интегрировать полученные данные в ваши скрипты и приложения, используя их в нужном вам формате.