将整个项目的字符集转换为UTF-8

7

你好,我有一个项目是在Windows下使用Windows 1252字符集编写的,但我的数据库全部采用UTF-8编码。因此,我需要将所有的.php文件转换为UTF-8字符集。请问是否有一种使用Linux命令或软件来实现这个目标的方法?


只需要几行Python代码就可以将单个文件转换。 - Mark Ransom
3个回答

12
在项目的根目录中,使用 find(1) 列出所有 *.php 文件,并与 recode(1) 结合使用,以原地转换这些文件:
find . -type f -name '*.php' -exec recode windows1252..utf8 \{} \;

作为recode(1)的替代方案,您也可以使用iconv(1)进行转换(用于上面的find命令的用法:iconv -f windows-1252 -t utf-8 -o \{} \{})。
您需要安装recode或iconv才能使上述内容正常工作。在大多数现代系统上,这两者都应该很容易通过软件包管理器安装。

我得到了这个命令:find -type f -name '*.php' -exec recode windows1252..utf8 {} ; 找不到选项-t, 用法:find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]       find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression] - vinicius gati
带点的话可以正常运行,但它会显示“找不到文件或目录:recode”。 - vinicius gati
哦,我找到了,我需要使用brew install安装recode,谢谢你,救了我的一天。 - vinicius gati

1
我曾经遇到过一个类似的情况,但并非所有文件都是用ISO-8859编码的。有些是用ASCII或UTF-8编码的。使用裸的find ... -exec iconv ...命令会破坏我的git仓库,我不得不重新克隆它。
以下是我用来避免错误转换的方法:
for f in $(find . -type f); do file $f | grep -q ISO-8859 && iconv -f ISO-8859-1 -t UTF-8 -o $f $f; done

1

要使用Python转换单个文件(因为我被问到了...)

import codecs
with codecs.open(filename_in, 'r', 'windows-1252') as fin:
    with codecs.open(filename_out, 'w', 'utf-8') as fout:
        for line in fin:
            fout.write(line)

也可以直接将编码为utf-8的内容编码到字符串中,而不必写入文件:

utf8_line = line.encode('utf-8')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接