繁体   English   中英

如何在许多文件中更改编码?

[英]How to change encoding in many files?

我试试这个:

find . -exec iconv -f iso8859-2 -t utf-8 {} \;

但输出转到屏幕,而不是同一个文件。 怎么做?

试试这个:

find . -type f -print -exec iconv -f iso8859-2 -t utf-8 -o {}.converted {} \; -exec mv {}.converted {} \;

它将使用带有'.converted'后缀(扩展名)的临时文件,然后将其移动到原始名称,所以如果你的文件带有'.converted'后缀(我认为你没有),请小心。

此脚本对于包含空格的文件名也不安全,因此为了更加安全,您应该双引号:“{}”而不是{}和“{} .converted”而不是{} .converted

我发现这种方法对我来说效果很好,特别是在我有多个文件编码和多个文件扩展名的情况下。

创建一个名为script.vim的vim脚本:

set bomb
set fileencoding=utf-8
wq

然后在要定位的文件扩展名上运行脚本:

find . -type f \( -iname "*.html" -o -iname "*.htm" -o -iname "*.php" -o -iname "*.css" -o -iname "*.less" -o -iname "*.js" \) -exec vim -S script.vim {} \;

没有人提出自动检测编码和重新编码的方法。

这是一个从GIT的主分支重新编码为UTF-8所有HTM / HTML文件的示例。

git ls-tree master -r --name-only | grep htm | xargs -n1 -I{} bash -c 'recode "$(file -b --mime-encoding {})..utf-8" {}'

阅读enconv
如果您需要转换为当前的终端编码,您可以这样做:

find . -exec enconv -L czech {}\;

或者正是你想要的:

find . -exec enconv -L czech -x utf8 {}\;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM