【发布时间】:2012-02-16 11:33:57
【问题描述】:
我试试这个:
find . -exec iconv -f iso8859-2 -t utf-8 {} \;
但输出到屏幕,而不是同一个文件。怎么做?
【问题讨论】:
-
您也可以看到带有“cat”的文件我认为您的文件问题不是编码!也许你的文件可能包含一些颜色代码,所以你看不到正常的文件..请尝试“cat”命令并再次写入..是否正常看到?
我试试这个:
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
【讨论】:
了解enconv。
如果您需要转换为您当前的终端编码,您可以这样做:
find . -exec enconv -L czech {}\;
或者正是你想要的:
find . -exec enconv -L czech -x utf8 {}\;
【讨论】:
我发现这种方法对我很有效,尤其是在我有多个文件编码和多个文件扩展名的情况下。
创建一个名为 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 主分支中的所有 HTM/HTML 文件重新编码为 UTF-8 的示例。
git ls-tree master -r --name-only | grep htm | xargs -n1 -I{} bash -c 'recode "$(file -b --mime-encoding {})..utf-8" {}'
【讨论】: