热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux下不同文件编码的转换

一、什么是编码。字符编码(CharacterEncoding)可以说就是让某一字符序列匹配一个指定集合中的某一东西,常见的例子包括长短电键组合起来表示的摩斯电码(MorseCode)、Baud
一、什么是编码。

字符编码(Character Encoding)可以说就是让某一字符序列匹配一个指定集合中的某一东西,常见的例子包括长短电键组合起来表示的摩斯电码(Morse Code)、Baudot code、Unicode和用二进制来表示的ASCII(American Standard Code for Information Interchange)码、这样便能够将文本在计算机中存储和通过通信网络发送出去。

字符表(Character Set)和字符编码(Character Encoding)经常被混淆。实际上Character Set(字符表)只是指一组为特定的Encoding System(编码系统)使用的符号集合,而不包含他们的数字含义或者顺序。而Character Encoding(字符编码)则包括了Character Set(字符表)和每个字符在字符编码集中的表示方法。由于历史的原因,MIME(Multipurpos Internet Mail Extensions)和使用这种编码的系统使用属于“字符集(Charset)”来表示用于将一组字符编码成一系列8位字节数据的整个系统。

摩斯电码(Morse Code)发明于1840年,用来编码字母、数字和拉丁字符,都用长短组合的电键来表示。
ASCII码发明与1963年,是由7位(7-bit)的二进制代码表示字符、数字、符号和固定长度的设备控制代码。同年,IBM使用8位(8-bit)的编码机制实现了ASCII的扩展EBCDIC(IBM's Extended Binary Coded Decimal Interchange Code)。

二、现代编码模型

Unicode和与他同等的标准ISO/IEC10646 UCS(Universal Character Set)共同构成了现代字符编码,为了更详细的解释这两个标准我们需要了解下面的一些概念。

字符表(Character Set或Character repertoire)是一个系统所支持的所有抽象字符的总和。字符表可以是封闭的,例如ASCII和多数ISO/IEC 8859,也可以是开放的,例如Unicode等可以添加新的符号。特定字符表中的字符反映了如何将书写系统分解成线性信息单元的问题。

编码字符集(CCS:Code Character Set)定义了如何使用称为码点的非负整数表示一个字符表。一个完整的字符集和对应的整数一起称为“编码字符集”。多个编码字符集可以表示同样的字符表,例如ISO-8859-1和IBM的代码页037和500覆盖同样的字符表但是将他们映射为不同的代码。

字符编码形式(CEF:Character Encoding Form)定义将编码字符集的整数代码转换成有限大小整数代码值以有利于使用固定位的二进制表示数字的形式的系统存储。

字符编码机制(CES:Character Encoding Scheme)定义固定大小的整数代码如何映射到适合基于8位字节数居的文件系统存储或者基于8位字节网络传输。在多数使用Unicode的场合,一个简单的字符编码机制用来指定每个整数的字节顺序是大字节在先排列顺序(Big-Endian)或者小字节在先排列顺序(Little-Endian)。然而,有些复杂的字符编码机制使用转义序列在几种简单编码机制和用于减小每个单元所用字节数的压缩机制之间切换。

Big endian和Little endian。
“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。

三、文件编码格式。

从文件编码的方式来看,文件可分为ASCII文件和二进制文件。
ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。
二进制文件是按二进制的编码方式来存放文件的。
二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。

四、字符编码的转换。

由于目前共存的众多字符编码方法,为了方便,人们开发了很多在不同字符编码机制间转换数据的程序:

多平台方法:
iconv        提供标准的程序和API来进行编码转换;
convert_encoding.py    基于Python的文本文件转换工具;
decodeh.py    提供算法和模块来谈测字符的编码;

Linux:
recode    转换文件编码;
Utrac    转换文件编码;
cstocs    转换文件编码;
convmv    转换文件名编码;
enca    分析给定文件的编码;

Windows:
cscvt    字符集转换工具;

五、Linux下利用Vim查看文件编码和进行编码转换。

在VIM中查看文件编码
:set fileencoding

在VIM中执行文件编码转换
:set fileencoding=utf-8

我的系统Fedora 10的VIM默认是不支持GBK的,如果想让VIM支持,需要修改~/.vimrc
set fileencodings=utf-8,gbk
这样VIM就会按照这个顺序去匹配文件的编码

五、使用命令进行文件编码的转换

可以使用最常用的ICONV命令进行文件编码的转换,格式
iconv -f encoding -t encoding inputfile
更详细的说明可以man iconv


[参考文献]
1、MSDN    http://msdn.microsoft.com/zh-cn/library/x14b16ab(VS.80).aspx
2、文件编码格式    http://blog.chinaunix.net/u2/82877/showart_1892207.html
3、Linux下查看文件编码、文件编码转换和文件名编码    http://www.luoxf.net/wordpress/archives/227
4、字符、字节和编码        http://www.regexlab.com/zh/encoding.htm
5、CSDN相关文章    http://blog.csdn.net/fancyaphy/archive/2006/03/09/619972.aspx
6、WIKI字符编码    http://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81
7、Character Encoding    http://en.wikipedia.org/wiki/Character_encoding
8、MIME    http://en.wikipedia.org/wiki/MIME
推荐阅读
  • 对于一般的扩展包,我们一般直接pipinstallxxx即可安装,但是unrar直接安装后,发现并不能通过Python程序实现解压的功能& ... [详细]
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • 笔记day2 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • 找到JDK下载URL当然去官网找了。目前最新的1.8的下载URL(RPM)如下:http:download.oracle.comotn-pubjavajdk8u161-b122f3 ... [详细]
author-avatar
星寴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有