【问题标题】:How to change encoding in many files?如何更改许多文件中的编码?
【发布时间】:2012-02-16 11:33:57
【问题描述】:

我试试这个:

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

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

【问题讨论】:

  • 您也可以看到带有“cat”的文件我认为您的文件问题不是编码!也许你的文件可能包含一些颜色代码,所以你看不到正常的文件..请尝试“cat”命令并再次写入..是否正常看到?

标签: linux bash


【解决方案1】:

试试这个:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    或者正是你想要的:

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

    【讨论】:

    • 你为什么不一直在 utf8 中运行你的终端呢?让它成为交流的通用语。
    • 我确实以 utf8 编码运行我的终端
    【解决方案3】:

    我发现这种方法对我很有效,尤其是在我有多个文件编码和多个文件扩展名的情况下。

    创建一个名为 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 {} \;
    

    【讨论】:

      【解决方案4】:

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

      这是一个将 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" {}'

      【讨论】:

        猜你喜欢
        • 2011-05-07
        • 1970-01-01
        • 2015-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-19
        • 2019-03-31
        相关资源
        最近更新 更多