编码问题,说是一个小问题,当然不出问题的时间就是没有问题。当出了问题的时候,你才会发现这其实是一个大大问题。
字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识
1. ASCII码
我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。[color=orange]ASCII码一共规定了128个字符的编码,只占用了一个字节的后面7位,最前面的1位统一规定为0[/color]。
2.Unicode码
Unicode码,是一种通用的国际标准。 Unicode给每个字符提供了一个唯一的数字,不论是什么平台、不论是什么程序、不论什么语言。Unicode码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。[color=orange]值得注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储[/color]。
3. UTF-8
UTF-8就是在互联网上使用最广的一种unicode的实现方式。UTF-8最大的一个特点,就是它是一种变长的编码方式。
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此[color=orange]对于英语字母,UTF-8编码和ASCII码是相同的[/color]。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
4.GBK
GBK编码也是平时比较常见的编码方式。GBK编码,是微软利用GB 2312-80未使用的编码空间,收录GB 13000.1-93全部字符制定了GBK编码。GB 2312-80只收录6763个汉字,这远远不够收录完几万多的中国汉字的。GBK自身并非国家标准,居然还是微软制定的 :cry: 。之后中国质量技术监督局于2000年3月17日推出了GB 18030-2000标准,之后又出了 GB18030-2005。ASCII—GB2312—GBK—GB18030他们都是向下兼容的,区分英文编码和中文编码的方法是高字节的最高位不为0,其实GB中文编码都是双字节字符集。
网上查了一下,GB 18030与GBK基本兼容,不是完全兼容。
项目中,我遇见了java操作文本文件的问题,总结了一些知识。
1、如果一个文件只用到了英文,没有中文,不管你用GBK,还是UTF-8去打开文件,都不会有乱码。因为GBK与UTF-8都兼容ASCII。
2、WINDOWS下,记事本、Dreamweaver等编辑器会在文件开头加入BOM信息。[color=orange]在处理这些文件的时候一定要去掉BOM。[/color]
3、不同的操作系统对换行的处理也不同。Unix系统里,每行结尾只有"<换行>",即"\n";Windows系统里面,每行结尾是"<回车><换行>",即"\r\n";Mac系统里,每行结尾是"<回车>"。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识
1. ASCII码
我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。[color=orange]ASCII码一共规定了128个字符的编码,只占用了一个字节的后面7位,最前面的1位统一规定为0[/color]。
2.Unicode码
Unicode码,是一种通用的国际标准。 Unicode给每个字符提供了一个唯一的数字,不论是什么平台、不论是什么程序、不论什么语言。Unicode码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。[color=orange]值得注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储[/color]。
3. UTF-8
UTF-8就是在互联网上使用最广的一种unicode的实现方式。UTF-8最大的一个特点,就是它是一种变长的编码方式。
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此[color=orange]对于英语字母,UTF-8编码和ASCII码是相同的[/color]。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
4.GBK
GBK编码也是平时比较常见的编码方式。GBK编码,是微软利用GB 2312-80未使用的编码空间,收录GB 13000.1-93全部字符制定了GBK编码。GB 2312-80只收录6763个汉字,这远远不够收录完几万多的中国汉字的。GBK自身并非国家标准,居然还是微软制定的 :cry: 。之后中国质量技术监督局于2000年3月17日推出了GB 18030-2000标准,之后又出了 GB18030-2005。ASCII—GB2312—GBK—GB18030他们都是向下兼容的,区分英文编码和中文编码的方法是高字节的最高位不为0,其实GB中文编码都是双字节字符集。
网上查了一下,GB 18030与GBK基本兼容,不是完全兼容。
项目中,我遇见了java操作文本文件的问题,总结了一些知识。
1、如果一个文件只用到了英文,没有中文,不管你用GBK,还是UTF-8去打开文件,都不会有乱码。因为GBK与UTF-8都兼容ASCII。
2、WINDOWS下,记事本、Dreamweaver等编辑器会在文件开头加入BOM信息。[color=orange]在处理这些文件的时候一定要去掉BOM。[/color]
3、不同的操作系统对换行的处理也不同。Unix系统里,每行结尾只有"<换行>",即"\n";Windows系统里面,每行结尾是"<回车><换行>",即"\r\n";Mac系统里,每行结尾是"<回车>"。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。