ruby 如何在Alpine中添加CP932字符集到iconv

2g32fytz  于 2023-04-20  发布在  Ruby
关注(0)|答案(1)|浏览(173)

我想将CP 932字符串转换为UTF-8。
在Ubuntu中,我可以通过命令转换字符串

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

但是Apline 3.17中的iconv失败并出现错误:iconv: source charset CP932: Invalid argument
如何将CP 932字符集添加到iconv?
该命令是从一个ruby脚本调用的,所以如果有更好的方法可以用ruby或Alpine中的其他命令行工具将字符串CP932转换为UTF-8,我不会坚持iconv

omjgkv6w

omjgkv6w1#

Compile iconv from source,而不是使用软件包安装。
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

现在,您可以使用CP 932成功运行iconv。下面是一个示例:
1.创建一个新的UTF-8文件:

echo "潤" > foo

1.确认它是UTF-8:

file -i foo
foo: text/plain; charset=utf-8

1.将其转换为CP 932:

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.将CP 932转换回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

相关问题