Указание наборов символов с помощью команды Curl

Вопрос или проблема

Я пытаюсь извлечь список китайских иероглифов из 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, чтобы убедиться, что иероглифы отображаются корректно.

Заключение

Работа с кодировками может быть сложной задачей, особенно при использовании командной строки. Понимание процессов кодировки и преобразования поможет избежать проблем с отображением данных. Следуя приведенным рекомендациям, вы сможете корректно сохранить и обработать китайские символы, полученные с веб-сайта.

Это позволит вам интегрировать полученные данные в ваши скрипты и приложения, используя их в нужном вам формате.

Оцените материал
Добавить комментарий

Капча загружается...