file - 在脚本中通过 vim 将文件编码更改为 utf-8

标签 file encoding utf-8 vi character-encoding

我们的服务器从 Debian 4 更新到 5 后,我就被击倒了。 我们切换到 UTF-8 环境,现在在浏览器上正确打印文本时遇到问题,因为所有文件都是非 utf8 编码,如 iso-8859-1、ascii 等。

我尝试了很多不同的脚本。

我尝试的第一个是“iconv”。那个不起作用,它改变了内容,但文件的编码仍然是非utf8。

enca、encamv、convmv 和我通过 apt-get 安装的其他一些工具也有同样的问题。

然后我找到了一个python代码,它使用chardet Universal Detector模块来检测文件的编码(效果很好),但是使用unicode类或codec类将其保存为utf-8不起作用,没有任何错误。

我发现将文件及其内容转换为 UTF-8 的唯一方法是 vi。

以下是我对一个文件执行的步骤:

vi filename.php
:set bomb
:set fileencoding=utf-8
:wq

就是这样。那一个工作完美。但我怎样才能通过脚本让它运行呢? 我想编写一个脚本(Linux shell),它遍历一个目录并获取所有 php 文件,然后使用 vi 和上面的命令转换它们。 由于我需要启动 vi 应用程序,我不知道如何执行以下操作:

“vi --run-command=':设置炸弹,:set fileencoding=utf-8' filename.php”

希望有人能帮助我。

最佳答案

这是我所知道的从命令行轻松执行此操作的最简单方法:

vim +"argdo se bomb | se fileencoding=utf-8 | w" $(find . -type f -name *.php)

或者如果文件数量预计相当大,那就更好了:

find . -type f -name *.php | xargs vim +"argdo se bomb | se fileencoding=utf-8 | w"

关于file - 在脚本中通过 vim 将文件编码更改为 utf-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311750/

相关文章:

Javadoc 错误 : unmappable character for encoding ASCII

c++ - Isstringstream 不适用于整数

dup2 上的困惑

java - 程序未创建文件。怎么了?

java - 在jsp eval表达式中读取文件

c# - 如何在 C# 中创建 UTF8 文件

java - 3 字节 UTF-8 序列 xml 转换异常的无效字节 2

python - 使用 Python 搜索 Unicode 文件

php - DOMDocument 和 UTF8。 MySQL 说 : Incorrect string value

php - Dompdf-Laravel Unicode 字符无法正确渲染