Как добавить кодировку CP932 в iconv в Alpine

Я хочу преобразовать строку CP932 в UTF-8.

В Ubuntu я могу преобразовать строку командой

iconv -f CP932 -t UTF-8 [input_file]

Но iconv в Apline 3.17 завершается с ошибкой: iconv: source charset CP932: Invalid argument.

Как добавить кодировку CP932 в iconv?

Команда вызывается из сценария ruby, поэтому я не придерживаюсь iconv, если есть лучший способ преобразовать строку CP932 в UTF-8 с помощью ruby ​​или другого инструмента командной строки в Alpine.

Возможно, у него другое название. iconv имеет возможность вывести список кодовых страниц, которые он поддерживает. CP932 иногда называют Shift-JIS.

Paul Dempsey 12.04.2023 03:06

CP932 (также называемый Windows-31J) — это вариант Shift-JIS. Это не то же самое.

ironsand 12.04.2023 06:28

Shift-JIS — это действительно семейство кодировок. Суть в том, чтобы искать кодировку под псевдонимом в iconv. Другой способ — спросить, как установить кодовую страницу или поддержку японского языка в Alpine Linux.

Paul Dempsey 13.04.2023 20:07
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
3
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скомпилируйте iconv из исходников, а не устанавливайте его с пакетом.

  1. Установите утилиты, необходимые для сборки из исходников:
apk add --no-cache curl build-base
  1. Скачать исходник:
cd /tmp
curl -O https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz
tar xvf libiconv-1.17.tar.gz
cd libiconv-1.17/
  1. Настройте, скомпилируйте и установите iconv в /usr/local/bin:
./configure
make
make install
  1. Удалите загруженный источник:
cd /tmp
rm -rf libiconv-1.17/
rm libiconv-1.17.tar.gz

Теперь вы можете успешно запустить iconv с CP932. Вот пример:

  1. Создайте новый файл UTF-8:
echo "潤" > foo
  1. Подтвердите, что это UTF-8:
file -i foo
foo: text/plain; charset=utf-8
  1. Преобразуйте его в CP932:
iconv -f UTF-8 -t CP932 foo > foo.cp932
  1. Подтвердите, что он был преобразован:
file -i foo.cp932
foo.cp932: text/plain; charset=unknown-8bit

и:

cat foo.cp932
��
  1. Преобразуйте CP932 обратно в UTF-8:
iconv -f CP932 -t UTF-8 foo.cp932 > foo.utf8
  1. Подтвердите, что он был правильно преобразован:
file -i foo.utf8
foo.utf8: text/plain; charset=utf-8

и:

cat foo.utf8
潤

и:

md5sum foo
54282143d705814d6ba671b783f2e0ba  foo

md5sum foo.utf8
54282143d705814d6ba671b783f2e0ba  foo.utf8

Другие вопросы по теме