一个计算机技术爱好者与学习者

0%

好好学Linux:编码格式转换

1. 编码格式修改

执行sh脚本时报错:/bin/sh^M: bad interpreter: No such file or directory

1、添加执行权限
chmod a+x filename

2、然后修改文件格式
vi filename

3、利用如下命令查看文件格式

:set ff:set fileformat

可以看到 fileformat=dos 或 fileformat=unix。

4、利用如下命令修改文件格式

:set ff=unix:set fileformat=unix

5、保存文件
:wq

6、最后再执行文件
./filename

2. UTF-8 BOM 转 UTF-8

使用macos/linux中编译运行windows下创建的java项目,报错 Error:(1, 1) java: 非法字符: ‘\ufeff’。
BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)。
微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开,但这样的文件在 Windows 之外的操作系统里会带来问题。
那么,怎么把utf8 bom编码文件批量转换为utf8编码文件呢?使用下面的脚本。

1
2
3
4
5
6
7
8
# 当前目录下递归所有文件
grep -r -i -l $'^\xEF\xBB\xBF' . | xargs sed -i 's/^\xEF\xBB\xBF//g'
# 当前目录下所有文件
grep -i -l $'^\xEF\xBB\xBF' * | xargs sed -i 's/^\xEF\xBB\xBF//g'
# macos
brew install gnu-sed
grep -r -i -l $'^\xEF\xBB\xBF' . | xargs gsed -i 's/^\xEF\xBB\xBF//g'
grep -i -l $'^\xEF\xBB\xBF' * | xargs gsed -i 's/^\xEF\xBB\xBF//g'

3. GBK 转 UTF-8

1、单个文件编码转换
打开一个文件,发现中文显示乱码,大概率编码问题。使用下面的命令进行转码:

1
iconv -f GBK -t UTF-8 inputfile > outputfile

2、多个文件批量编码转换

1
2
3
4
5
6
7
#!/bin/bash
find . -type f -name "*.py" > filename.txt
while read line;do
iconv -f GBK -t UTF-8 ${line} > ${line}.bak
mv ${line}.bak ${line}
done < filename.txt
rm -f filename.txt
  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-linux-encoding/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~