`

*nix下文件字符编码转换方法

阅读更多

为毛需要转换

历史原因,公司内部的source code中充斥着大量的GBK编码,但是明显UTF-8更适合国际化的字符需求。如果不转换,在IDE中各种字符编码切换,各种蛋疼。一不小心,多种编码一叠加,造成不可逆的乱码保存,那就永远乱码的噩梦了。
当然,更好的国际化支持,除了统一用UTF-8保存文件之外,更好的做法是,source code中压根就不应该出现中文(当然,这点可能会被很多人喷,算了,这个不是重点,本文的重点是怎么转)。

如何转换

基本都是利用*nix系本身提供的iconv一行帮你搞定问题。

*nix下的通用做法

这里,*nix是指Unix like(包括Mac)、Linux系下的通用做法,利用输出重定向

find . -name '*.java'| while read file; do iconv -f GBK -t UTF-8 "$file" > /tmp/a; cp /tmp/a "$file"; done

 

这里,你需要修改无非是管道前面的find命令,获取你这种关心的文件就行啦。

Ubuntu下的做法

如果你用的是debian发行版的Ubuntu版本,那么恭喜你,你有稍微简化一点的写法,就是可以真正利用Linux下iconv的-o参数修改同一个文件。

find . -name '*.java' -exec iconv -f GBK -t UTF-8 {} -o {} \;

 

注意:对于替换当前文件自己,-o参数并非在所有Linux下都管用

上述方法,在公司内的Linux发行版下,就不好使。会造成被修改文件被清空!
所以,安全第一,你还是上面的通用命令吧。

分享到:
评论

相关推荐

    dotfiles, *NIX 系统的个人 dotfiles.zip

    这些文件以点(.)开头,通常隐藏在用户的主目录下,用于存储用户自定义的配置信息。`dotfiles` 的使用可以让用户轻松地在不同计算机之间同步个性化设置,提升工作效率。 标题 "dotfiles, *NIX 系统的个人 dotfiles...

    nix, Rust 与 *nix api的友好绑定.zip

    nix, Rust 与 *nix api的友好绑定 Rust 绑定到 *nix api 文档( 释放)Nix试图为各种 *nix 平台 api ( Linux,达尔文,。) 提供友好的绑定。 目标是不提供 100%统一接口,而是统一什么可以以提供平台特定 api 。对于...

    libmail *nix 下的邮件收取代码,很好用的,是个开源的

    *nix 下的邮件收取代码,很好用的,是个开源的

    Oracle出品的*nix系统性能参数采集工具

    而“OS Watcher User's Guide.mht”可能是通用的用户手册,涵盖了所有*nix系统的使用方法和技巧。 压缩包中的“osw212.tar”文件是一个传统的Unix档案,很可能包含了OS Watcher的源代码或者二进制可执行文件。对于...

    Go-immortal是一个*nix跨平台管理操作系统无关

    7. **跨平台兼容**:由于采用Go语言编写,Go-immortal可以编译为多种平台的二进制文件,覆盖了大部分*nix操作系统。 8. **安全特性**:通过设置用户和组,Go-immortal可以帮助限制守护进程的权限,提高系统的安全性...

    Prometheus 导出器,用于 *NIX 内核公开的硬件和操作系统指标,用 Go 编写,带有可插拔指标收集器

    **Prometheus Node Exporter** 是一个广泛使用的开源项目,它专为 *NIX 操作系统设计,用于收集和暴露硬件及操作系统级别的监控指标。由 Go 语言编写,它具有轻量级、高效以及可扩展的特点,使其成为 DevOps 社区中...

    node.js 源码 *nix版

    如果提示错误是由于 Python 版本过低,那么解决方法就是升级 Python 到满足 Node.js 编译要求的版本。 1. **Python 版本要求**:Node.js 的源码构建可能需要特定版本的 Python,通常是 Python 2.6、2.7 或更高版本...

    dotfiles:* nix配置文件

    "dotfiles"是指那些以点(.)开头的隐藏配置文件,它们通常位于用户的主目录下,用于个性化和定制化用户环境。这些文件包含了各种应用程序和系统的设置,使得用户可以根据自己的喜好和工作需求来调整系统的行为。 ...

    fs-easymotion:一组帮助导航 *nix 文件系统的函数

    fs-easymotion 是一组 bash 函数,可帮助使用内置的 *nix 命令导航文件系统。 目前仅在 zsh 上进行了测试,但最终会更新以适用于所有流行的 shell。 受到,它试图通过很少的按键而不是长或重复的命令来简化向下...

    static-binaries, 作为静态链接二进制文件生成的各种 *nix 工具.zip

    static-binaries, 作为静态链接二进制文件生成的各种 *nix 工具 静态二进制文件这个 repo 包含一组静态链接的各种工具,以及 Dockerfiles/其他构建脚本,这些脚本可以用来构建它们。 我通常只是根据需要创建这些工具...

    nix:与* nix API的Rust友好绑定

    4. **广泛的API覆盖**:nix库包含了文件系统操作、进程控制、信号处理、网络编程等多个领域的系统调用。 5. **平台兼容性**:nix库致力于跨平台支持,不仅限于Linux,还涵盖macOS、FreeBSD等其他* nix系统。 6. **...

    Go-cronsun是一个分布式任务系统单个结点和*nix机器上的crontab近似

    提供的压缩包文件"shunfei-cronsun-8513038"可能是指Go-cronsun的特定版本号,这表明该版本可能包含了特定的修复、优化或新特性。通常,每个版本都有其变更日志,详细记录了相对于前一版本的改进,用户可以根据这些...

    dotfiles:我的* nix配置文件

    在IT领域,尤其是在Unix或类Unix系统(如Linux和macOS)中,"dotfiles"是一个非常重要的概念,它指的是用户主目录下以点(.)开头的隐藏文件和文件夹。这些文件通常包含了用户的个性化配置、环境设置以及各种应用...

    点文件:我所有的各种* nix点文件

    "点文件:我所有的各种* nix点文件"这个标题暗示了这是一个包含多种点文件的集合,可能用于备份或分享个人的系统配置。 1. **点文件的命名规则**: - 点文件以"."开头,如`.bashrc`,`.vimrc`等。 - 这种命名方式...

    nix-dotenv:Nix环境构建器

    这个文件通常用来存储敏感信息,如API密钥、数据库连接字符串等,而不将它们硬编码到代码中。dotenv允许开发者将这些变量与版本控制分开,保护了项目的安全性。 **nix-dotenv结合Nix和dotenv** `nix-dotenv` 是这...

    nix-repo-源码.rar

    学习nix-repo源码,首先需要熟悉Nix语言和Git的基本概念,然后逐个分析`src`目录下的模块,理解其功能和相互关系。重点关注以下几个关键组件: - **仓库操作**:如`repo.py`中的函数,负责与Git仓库的交互。 - **...

    正则表达式系统教程 正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,

    目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。 <br> 正则表达式的使用,可以通过...

    _nixrice:* nix环境(镜像)的个人.files

    目录[* nix部署脚本](#* nix部署脚本)介绍这些文件旨在跨多个,因此,大多数脚本的编写目的都是不依赖[os / distro / software] 。 aka POSIX兼容。剧本快速浏览一下我的脚本,这些脚本主要用于设置开发环境。 ...

Global site tag (gtag.js) - Google Analytics