`
liuguxing
  • 浏览: 95178 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux下查看文件编码,文件编码格式转换和文件名编码

 
阅读更多
如果要在Linux中操作windows下的文件,那么会经常遇到文件编码转换的问题。Windows中默认的文件格式是 GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。查看文件编码在Linux中查看文件编码可以通过以下几种方式:
   1、在Vim中查看文件编码 :set fileencoding 即可显示文件编码格式。如果只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么可以在 ~/.vimrc 文件中添加以下内容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
      转换文件编码的方式
      1、在Vim中直接转换文件编码:
      比如将一个文件转换成utf-8格式 :set fileencoding=utf-8 。
    
      2. iconv命令 转换
      iconv的命令格式如下: iconv -f encoding -t encoding inputfile。 比如将一个UTF-8 编码的文件转换成GBK编码 ,其格式为:iconv -f GBK -t UTF-8 file1 -o file2

    文件名编码转换
   从Linux往 windows拷贝文件或者从windows往Linux拷贝文件,有时会出现中文文件名乱码的情况,出现这种问题的原因是:windows的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致,所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。在Linux中专门提供了一种工具convmv进行文件名编码的转换,可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。首先看一下你的系统上是否安装了convmv,如果没安装的话用:yum -y install convmv 安装。

     下面看一下convmv的具体用法: convmv -f 源编码 -t 新编码 [选项] 文件名

     常用参数:

     -r 递归处理子文件夹

    --notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。

   --list 显示所有支持的编码

    --unescap 可以做一下转义,比如把%20变成空格。

     如我们有一个utf8编码的文件名,转换成GBK编码,命令如下: convmv -f UTF-8 -t GBK --notest utf8编码的文件名 这样转换以后"utf8编码的文件名"会被转换成GBK编码(只是文件名编码的转换,文件内容不会发生变化)。

     vim 编码方式的设置 和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。 Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:

    * encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在.vimrc 中改变它的值才有意义。可以用另外一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码).

     * fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。

     * fileencodings: Vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。

     * termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term 的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。

    好了,解释完了这一堆容易让新手犯糊涂的参数,我们来看看 Vim 的多字符编码方式支持是如何工作的。

     1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。

    2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。

    3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll(注2),你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。

    4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示cp936,也就是 GBK 的代码页)。

转自:http://blog.sina.com.cn/s/blog_5cdb72780100deys.html
分享到:
评论

相关推荐

    Linux下查看文件编码,文件编码格式转换和文件名编码.doc

    Linux 文件编码查看、转换和文件名编码转换 在 Linux 中查看文件编码可以通过多种方式实现,例如,在 Vim 中可以使用 `set fileencoding` 命令来查看当前文件的编码格式。如果需要自动识别文件编码,可以在 `~/....

    linux转化windows文件编码格式脚本

    Linux 转换 Windows 文件编码格式脚本是将 Windows 上的文件编码格式转换为 UTF-8 编码,以便在移植 Windows 代码到 Linux 下时避免注释代码乱码和编码格式引起的编译错误。 该脚本使用 Bash shell 脚本语言编写,...

    Linux下中文文件名乱码问题的详解 - CSDN博客1

    在这种情况下,我们需要确保在处理文件名时进行正确的编码转换。在PHP中,可以使用`iconv`或`mb_convert_encoding`函数来进行编码转换。 文章中提到,作者在项目中遇到了生成的压缩包文件(可能是通过tar或gzip命令...

    批量文件名编码转换.7z

    总之,"批量文件名编码转换.7z" 解决了IT领域中常见的文件名编码不兼容问题,通过批量URL编码转换,使文件在不同环境间能顺畅地传输和共享。这个工具的使用有助于提升工作效率,减少因编码差异导致的文件管理困扰。

    linux下的文件名乱码,转为正常

    - **UTF-8**:UTF-8是Unicode的一种实现方式,广泛应用于Linux和网络,它能兼容ASCII编码,并且在大多数情况下是默认的文件名编码。 - **locale**:在Linux中,locale用于定义本地化设置,包括字符编码、日期格式...

    Ubuntu Linux系统下文件编码转换的技巧

    Ubuntu Linux 系统下文件编码转换是一个常见的问题,对于程序员和开发者来说尤其重要。在 Ubuntu 系统下,默认的文件编码是 utf-8 的,但是有些时候,我们需要把文件从默认的 gbk 编码转换成 utf-8 编码,以便更好...

    JAVA文件编码转换工具1.50base[jar文件]

    jar文件,linux下终端使用 java -jar 文件名运行 选择文件 重命名文件为原文件名+".bak" 执行编码转换,创建新文件为原文件名 选择文件夹 文件过滤生效 附带GBK编码文件news.sql 有问题请邮件我:hj-545@qq.com ...

    Linux下批量修改文件编码

    本文详细介绍了如何在Linux环境下批量修改文件编码的方法,通过具体的示例脚本演示了如何将`.php`文件从GB2312编码转换为UTF-8编码。掌握了这些技巧后,可以帮助我们更高效地处理跨平台文件交互中的编码问题。

    部署到linux服务器文件名乱码问题

    当文件从Linux服务器传输到Windows服务器再返回Linux服务器时,文件名的编码经历了两次转换,如果没有正确处理编码转换,则容易出现乱码。 2. **避免乱码的方法**:为了避免此类问题的发生,可以在传输过程中尽量...

    ckfinder修改文件名称

    他们可能添加了对文件名编码转换的逻辑,比如使用`URLEncoder.encode()`和`URLDecoder.decode()`进行URL编码和解码,或者使用`CharsetEncoder`和`CharsetDecoder`进行更细致的字符集转换。 修改源码并重新打包成jar...

    linux环境音频编码

    在Linux环境中进行音频编码,尤其是将.wav格式转换为.aac格式,涉及到许多核心技术和工具。以下是一些关于这个主题的重要知识点: 1. **音频编码格式**:音频编码是为了压缩音频数据,减少存储空间和网络传输的带宽...

    批量修改文件名、修改文件 创建时间、修改时间、访问时间、音频转换为MP3

    在转换过程中,你可以选择不同的比特率和质量设置,以平衡音质和文件大小。 M4a格式是由Apple推出的一种音频文件格式,它基于AAC编码,通常提供比同等大小的MP3更好的音质。然而,由于MP3的普及度,有时需要将M4a...

    linux乱码问题的解决办法

    - **转换文件名编码**:例如,将所有`.mp3`文件名从GBK编码转换为UTF-8编码,可以使用`convmv -f GBK -t UTF-8 *.mp3`命令。默认情况下,Convmv仅显示转换效果而不实际执行转换操作。要实际执行转换,需要加上`--no...

    linux文件转化

    2. **文件系统的限制**:如果文件系统为NTFS或FAT格式,则在进行文件名编码转换时需要注意,因为这些文件系统可能无法支持某些特殊字符。 通过以上方法,可以有效地解决Linux与Windows之间文件传输时遇到的编码问题...

    ev1转换器ev1转换器

    标题中的“ev1转换器”很可能是指一种工具或软件,用于将特定格式的文件(可能是EV1编码的视频文件)转换成其他更通用或兼容的格式。EV1可能是一种特定的编码格式,常用于视频录制或存储,尤其在专业视频制作领域。...

    Rails中上传文件保存中文文件名乱码

    2. 使用`iconv`库或`String#encode`方法转换文件名编码,确保文件名以UTF-8格式保存。 3. 存储转换后的文件名到数据库,以便后续操作。 4. 在需要的时候,从数据库取出文件名并解码,以便正确访问文件。 通过这些...

    Linux下三星S5230手机视频格式转换器

    总的来说,通过Linux和FFmpeg,我们可以高效地为三星S5230手机转换合适的视频格式,确保在小巧的屏幕上获得良好的观看体验。记得在转换前备份原始视频,以防万一,并根据实际需要调整转换参数。

    ffmpeg视频格式转换

    这里,`-i`参数指定输入文件,`-c:v`和`-c:a`分别指定了视频和音频的编码格式,最后的`输出文件`是转换后的文件名。 例如,如果你想要将一个MP4文件转换为WebM格式,同时保持原始的H.264编码和AAC音频,命令会是: ...

    Java中压缩与解压--中文文件名乱码解决办法

    这个问题主要源于Java中默认使用的编码方式与实际文件名编码不一致,尤其是在Windows系统下,文件名通常采用GB2312或GBK编码,而Java中的`ZipInputStream`和`ZipOutputStream`类默认使用的是Unicode编码,这种编码...

Global site tag (gtag.js) - Google Analytics