【问题标题】:How to make sure all my source files stay UTF-8 with Unix line endings?如何确保我的所有源文件都保持 UTF-8 和 Unix 行结尾?
【发布时间】:2012-01-22 13:02:34
【问题描述】:
我正在寻找一些适用于 Linux 的命令行工具,它们可以帮助我检测和转换来自 iso-8859-1 和 windows-1252 等字符集的文件到 utf-8 以及从 Windows 行尾到 Unix 行尾。
我需要这个的原因是我正在通过 SFTP 在 Linux 服务器上使用 Windows 上的编辑器(如 Sublime Text)处理项目,这些编辑器不断地搞砸这些事情。现在我猜我的文件大约有一半是 utf-8,其余的是 iso-8859-1 和 windows-1252似乎 Sublime Text 只是在我保存文件时根据文件包含的符号选择字符集。即使我在选项中指定默认行尾为 LF,行尾始终是 Windows 行尾,所以我的文件中大约有一半有 LF,一半是 CRLF.
所以我至少需要一个工具,它可以递归扫描我的项目文件夹,并提醒我有 utf-8 和 LF 行结尾的文件,这样我就可以在我将更改提交到 GIT 之前手动修复它。
也欢迎任何有关该主题的 cmets 和个人经验。
谢谢
编辑:我有一个临时解决方案,我使用tree 和file 输出有关我项目中每个文件的信息,但这有点不靠谱.如果我不包括 file 的 -i 选项,那么我的很多文件都会得到不同的输出,例如 ASCII C++ 程序文本 和 HTML 文档文本 和 英文文本等:
$ tree -f -i -a -I node_modules --noreport -n | xargs 文件 | grep -v 目录
./config.json:ASCII C++ 程序文本
./debugserver.sh:ASCII 文本
./.gitignore:ASCII 文本,没有行终止符
./lib/config.js:ASCII 文本
./lib/database.js:ASCII 文本
./lib/get_input.js:ASCII 文本
./lib/models/stream.js:ASCII 英文文本
./lib/serverconfig.js:ASCII 文本
./lib/server.js:ASCII 文本
./package.json:ASCII 文本
./public/index.html:HTML 文档文本
./src/config.coffee:ASCII 英文文本
./src/database.coffee:ASCII 英文文本
./src/get_input.coffee:ASCII 英文文本,带有 CRLF 行终止符
./src/jtv.coffee:ASCII 英文文本
./src/models/stream.coffee:ASCII 英文文本
./src/server.coffee:ASCII 文本
./src/serverconfig.coffee:ASCII 文本
./testserver.sh:ASCII 文本
./vendor/minify.json.js:ASCII C++ 程序文本,带有 CRLF 行终止符
但如果我确实包含 -i 它不会显示行终止符:
$ tree -f -i -a -I node_modules --noreport -n | xargs 文件 -i | grep -v 目录
./config.json: 文本/x-c++; charset=us-ascii
./debugserver.sh:文本/纯文本; charset=us-ascii
./.gitignore:文本/纯文本; charset=us-ascii
./lib/config.js:文本/纯文本; charset=us-ascii
./lib/database.js:文本/纯文本; charset=us-ascii
./lib/get_input.js:文本/纯文本; charset=us-ascii
./lib/models/stream.js:文本/纯文本; charset=us-ascii
./lib/serverconfig.js:文本/纯文本; charset=us-ascii
./lib/server.js:文本/纯文本; charset=us-ascii
./package.json:文本/纯文本; charset=us-ascii
./public/index.html:文本/html; charset=us-ascii
./src/config.coffee:文本/纯文本; charset=us-ascii
./src/database.coffee:文本/纯文本; charset=us-ascii
./src/get_input.coffee:文本/纯文本; charset=us-ascii
./src/jtv.coffee:文本/纯文本; charset=us-ascii
./src/models/stream.coffee:文本/纯文本; charset=us-ascii
./src/server.coffee:文本/纯文本; charset=us-ascii
./src/serverconfig.coffee:文本/纯文本; charset=us-ascii
./testserver.sh:文本/纯文本; charset=us-ascii
./vendor/minify.json.js: text/x-c++; charset=us-ascii
还有为什么它显示 charset=us-ascii 而不是 utf-8? text/x-c++ 是什么?有没有办法只为每个文件输出charset=utf-8 和line-terminators=LF?
【问题讨论】:
-
作为一种解决方法,也许您可以包含一个带有明显非 ASCII 字符代码的注释(想到版权符号)并保存为 UTF-8 - 也许这对于 Sublime Text 来说已经足够了不要再猜测了。
-
为了上帝的爱,我也无法让 Sublime Text 仅仅使用该死的 Unix 换行符!! "default_line_ending": "unix" 应该可以工作!
标签:
unix
command-line
character-encoding
sublimetext
line-endings