计算机中字符串编码、随机码、BOM等问题的详细说明
因为电脑是Windows 7系统的开发环境在Linux,经常遇到的问题在Linux,这是痛苦的,并决定尝试了解长气脉的编码,和你分享,以免出现乱码时不知所措。是否有文件编码
在解释字符编码之前,我们需要确保文件本身没有编码。只有文本具有编码的概念。我们通常说什么是文件编码,通常是指文件中字符的编码。
为什么会有乱码
在Linux下,我通常使用文件编辑,我发现代码经常被遇到,为什么会有一堆代码呢首先,我们了解了底层编码的知识,并且在编码方面有3个变量:
字符编码方法在1.encoding:vim,包括缓冲区(缓冲区)活力,菜单的文本,文本的信息,等默认是按照你的区域选择。建议改变它的价值只有在用户手册vimrc。事实上,似乎要改变它的值in.vimrc.you是唯一有意义的可以使用另一种编码来编辑和保存文件作为您的Vim编码UTF-8,使用cp936编码文件的编辑器,vim会自动读取文件转换为UTF-8(VIM可以读取的方式),你的文件写入时,并会自动回到cp936(保存文件编码)。
当前编辑的文件的字符编码方法:vim 2.fileencoding。当保存文件时,它也会以这种字符编码方式保存文件(不管新文件是否都是相同的)。
该终端的字符编码(或Windows控制台窗口),是由3.termencoding:vim。如果VIM期限为Vim编码一样,它不需要设置。否则,您可以自动将它转换成与termencoding选择Vim术语的代码。
当这三个变量的编码出现问题时,就会出现随机代码。
1.encoding不是UTF-8编码:如果编码是UTF-8编码,其他角色不能转换为指定的编码。例如,如果编码是GBK编码和文件内容的编码是BIG5,它不能被转换成GBK编码。
2.fileencoding不对:fileEncoding编码是编码时使用Vim读取文件内容。如果它的编码不同于文件的字符编码,它不可避免地会产生乱码。fileEncoding码一般由Vim自动检测,并fileencodings设置可以使用,和Vim自动探针fileEncoding序列列表。但Vim有时检测到错误,就会有随机码。
3.termencoding代码是不正确的:我们通常使用远程登录到登录服务器,包括终端编码。我经常遇到的错误的终端代码导致错误的代码。例如,SecureCRT设置为UTF-8,和vim的termencoding是GBK。
字符编码简介
那么,字符编码到底是什么呢
字符(字符)是字符和符号的一般名称,包括文字、图形符号、数学符号等。一组抽象的人物叫做字符。字符集通常对应于一个特定的语言,所有的文字或最常见的字符在文本形式设置文本的字符,如英文字符和中文字符集,计算机需要处理各种字符,字符和二进制码的对应关系,这对应的是字符编码(编码),编码是首先要确定字符集,并在字符集的字符排序,然后对应的二进制数。根据字符集的字符数,确定了几个字节进行编码。
字符集与编码的区别:
字符集的字符集不一定适合计算机存储、网络传输和处理,有时可以应用在编码。例如,Unicode字符集可以以不同的方式编码,如UTF-8,UTF-16和UTF-32等等。
字符编码的发展
字符编码大致分为三个发展阶段。
ASCII编码:ASCII(美国信息交换标准码,美国信息交换标准码)是一套基于拉丁字母的计算机编码系统。由于计算机起源于美国,说英语的特点,他们开发了一个ASCII编码,ASCII编码使用7位来表示字符,用于制造高平价,0×20字节以下的状态称为控制代码,包括标点符号,数字等,当人们感觉不够好。
各种编码并存,但随着计算机的广泛应用,其他国家也开始使用计算机,但是很多国家不使用英语,他们有很多信件是没有发现在ASCII码,为了保持其在计算机中的字符,他们决定在127空位来表示这些新的字母符号采用。还增加了很多的绘画形式需要的水平、垂直、交叉的形状,数了最后一个状态255。字符集这一页从128到255的称为扩展字符集。最好的扩展是ISO 8859-1,通常称为Latin-1,与Latin-1包括足够的额外的字符集写的基本西方欧洲语言。
后来,其他国家开始使用计算机。为了表达他们国家的特点,不同的国家和地区都设立了不同的标准,并产生编码GB2312,BIG5标准,JIS等。2字节的0×80 ~ xff范围通常用来表示1个字符。例如,汉字中国使用的是两字节0xd6,0xd0 } {在中文操作系统存储,这2个字节,这代表了一个扩展一个字符的编码,称为ANSI码。
简体中文系统下,ANSI代码代表GB2312编码。日文操作系统下,ANSI代码代表JIS代码。不同的ANSI代码相互不兼容。当信息在国际上交互时,不可能将两种语言存储在同一ANSI编码的文本中。
Unicode编码标准编码,因为不同国家相互不兼容,为了使信息更方便国际交流,国际组织制定了Unicode字符集,为各种语言中的每个字符统一而独特的数量,以满足跨语言跨平台的要求,文本转换处理。当Unicode开始工作了,电脑的记忆容量是很大的发展空间,而不再是一个问题。所以ISO必须由两个字节或16位的直接规定,统一所有的字符,对于那些半宽字符的ASCII编码,Unicode保持原来的不变,但其长度T 8的扩展他最初的16,其他文化和语言字符都是统一的重新编码,因为宽度的英文符号只需要使用低8位,所以高8位总是0,所以空气计划将浪费在保存英语文本空间的一倍。
但Unicode走到了一起,有了计算机网络的兴起,网络传输有Unicode也是必须要考虑的一个问题,所以面向传输的UTF(UCS转换格式)标准,顾名思义,UTF8是每个8位数据传输,而UTF16 16各一次,但为了可靠性传输,从Unicode UTF时对应的不是直接的,而是一些算法和规则来转换。
学习计算机网络的童鞋都知道,这是在网络上传输信息的一个非常重要的问题,为高和低数据的解释,一些电脑是一种利用低位先发送的方法,例如我们的PC机采用英特尔架构;别人用来发送高。网络中的数据交流,以检查他们是否了解高和低是一样的,使用一个非常简单的方法,就是在文本流的开始符号时高如果在第一次发送文本发送给对方,然后把执行,另一方面,送FFFE。(IP和TCP使用大端字节序法协议的网络)
因为UTF-8编码与以前的ASCII编码的兼容,有利于传输,它已经得到了广泛的应用。
转换规则从Unicode UTF8:
复制代码代码如下所示:
Unicode UTF-8
0000 007f 0xxxxxxx
0080 07ff 110xxxxx 10xxxxxx
0800 1110xxxx 10xxxxxx 10xxxxxx FFFF
汉字ANSI编码的发展
我说:为了汉字,我国首先发明了GB2312编码,GB2312编码规则一个小于127的字符的意义相同,但两大于127字符,在汉字的前一个字节表示,(他称为高字节)从0xA1到0xf7以后,一个字节(低字节)从0xA1到0xfe,这样我们可以组成大约7000多个简体汉字。在编码,我们罗马数学符号,希腊字母、日文假名编写,甚至在ASCII有一些数字,标点符号,字母改为两个字节长的编码,这就是常说的的全宽度,和原来的127以下者称为半角字符。
GBK后发现许多孤立的单词和少数民族语言或以任何方式编码表示的字符,因此不再需要低字节码必须是127号后,只要第一个字节是大于127的固定来表明这是一个汉字的开始,不管是不是跟着一个扩展字符集的内容。结果扩展的编码方案被称为GBK GB2312 GBK标准,包括所有的内容,并在同一时间,近20000个新的汉字(包括繁体字)和符号添加。
GB18030则少数民族也要用电脑,所以我们扩大和新增的少数民族文字成千上万,和GBK扩展为GB18030。从此,中华民族的文化就可以在计算机时代继承。
BOM的介绍
1。BOM的起源:为了确定Unicode文件,微软建议所有Unicode文件应该从零宽度NOBREAK空间(U + FEFF)字符。这是作为一个功能或字节顺序标记(BOM)来识别编码和字节顺序文件中使用。
2。不同的系统支持BOM:由于某些系统或程序不支持BOM,使用BOM的Unicode文件有时会带来一些问题。
JDK1.5和读者不能处理UTF-8编码的文件清单。在分析这种格式的XML文件时,它们会抛出异常:序言中不允许内容。
Linux不使用BOM,因为它破坏了现有ASCII文件的语法约定。
(3)不同的编辑工具有不同的处理BOM。当您使用Windows的记事本文件保存为UTF-8编码,记事本自动插入BOM在文件的开头(虽然BOM是不必要的UTF-8)。许多其他的编辑是可选的没有BOM。这是UTF-8和UTF-16的情况。
当3.bom和XML的XML解析读取XML文件,W3C定义了3个规则:
(1)如果文档中有BOM,则定义文件代码。
如果文档中没有BOM,请查看XML声明中的编码属性;
如果以上两者都没有,它是假定的XML文档编码UTF-8。
文本的字符集和编码
软件通常有三种方法来确定文本的字符集和编码:
1。检测BOM
Unicode文本最标准的方法是检测文本的前几个字节。
复制代码代码如下所示:
开始的字节的字符集和编码
EF BB BF UTF-8
FE FF UTF-16 / UCS-2,小端(UTF-16LE)
FF FE UTF-16 /(UTF-16BE UCS-2,大端)
FF FE 0000 UTF-32 / UCS-4,小端。
0000铁FF UTF-32 / UCS-4,大endia
2。用户选择:采取更安全的方式来确定字符集及其编码,也就是弹出一个对话框来询问用户。
3、猜一猜:如果软件不想给用户带来麻烦,或者不方便用户请示,它只能采取自己的猜测方式。软件可以猜测哪些字符集可能是根据整个文本的特点,这可能是不允许的。这是用记事本打开链接文件的使用情况。(一个文件,原来是编码标准作为一个UTF-8。
记事本的几种编码介绍
1.ansi编码:记事本默认保存的编码格式是:ANSI,这是默认的本地操作系统的代码,一般是GB2312简体中文。这是怎么了保存记事本后,使用一个文本编辑器如emeditor,EditPlus,和UltraEdit打开它。建议使用emeditor。开盘后,该代码是在右下角显示:GB2312。
2。Unicode编码:当记事本保存为另一个时间,编码选择Unicode,和emeditor用于打开文件。研究发现,编码格式是UTF-16LE + BOM(签名)。第一个字节是十六十进制的方法发现:FF铁。这是BOM。
当3。Unicode大端存储在记事本,Unicode编码和Unicode被打开,并打开文件的emeditor。这是UTF-16BE发现编码格式+ BOM(签名)。第一个字节是十六十进制的方法发现:Fe FF。这是BOM。
4.utf-8:当笔记本保存,选择UTF-8编码的文件,并打开emeditor,和编码格式是UTF-8(签名)。在十六发现的第一个三字节的乐队:EF BB BF。这是BOM。