一、GBK的文字编码:是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。
UTF-8编码:则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的网站则用UTF-8节省空间。
所以如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。
ISO-8859-1:中文只占一个字节
二、首先了解一下BOM,字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。【来自维基百科】
读取文件代码,代码底层读取文件时,会根据不同编码的CharsetDecoder实现类来读取(比如UTF8编码):
public static void main(String[] args) throws FileNotFoundException { FileReader reader = new FileReader(new File("data.txt")); int read; try { System.out.println(reader.getEncoding()); while((read = reader.read())!=-1){ System.out.println(read+":"+(char)(read)); } } catch (IOException e) { e.printStackTrace(); } }
新建文本,内容为:
1411111哈哈
1、当格式为以UTF8有BOM时:
输入结果:
UTF8 65279: 49:1 52:4 49:1 49:1 49:1 49:1 49:1 21704:哈 21704:哈
2、当格式为以UTF8无BOM时:
输入结果:
UTF8 49:1 52:4 49:1 49:1 49:1 49:1 49:1 21704:哈 21704:哈
注意:上面代码中,我们直接用char强转读取的int值,并不是因为不考虑ASCII码表,而是因为read()方法底层读取的是char字段,直接赋值给int返回的。
int read; System.out.println(reader.getEncoding()); while((read = reader.read())!=-1){ System.out.println(read+":"+(char)(read)); }read()方法,arg1[0]为char类型:
private int read0() throws IOException { Object arg0 = this.lock; synchronized(this.lock) { if(this.haveLeftoverChar) { this.haveLeftoverChar = false; return this.leftoverChar; } else { char[] arg1 = new char[2]; int arg2 = this.read(arg1, 0, 2); switch(arg2) { case -1: return -1; case 0: default: assert false : arg2; return -1; case 2: this.leftoverChar = arg1[1]; this.haveLeftoverChar = true; case 1: return arg1[0]; } } } }三、一个ASCⅡ占用一个字节,所以假如在操作二进制流,比如发送http请求组装参数时,你把内容放入ByteArrayOutputStream,这时候你需要输入"xxxx?myname=liu刘",则操作如下示例:
相关推荐
此外,如果处理的文本包含非ASCII字符,还需要注意字节顺序标记(BOM)的影响,因为UTF-8和GBK都不包含BOM,但某些程序可能会添加BOM来标识文件编码。 总之,libiconv在Windows环境下的UTF-8和GBK编码转换是通过...
UTF-8-BOM,全称是“UTF-8 Byte Order Mark”,它在UTF-8编码的文件开头添加了一个特殊的字节序列(0xEF, 0xBB, 0xBF)来标识该文件使用的是UTF-8编码。BOM主要用于帮助软件识别文件的编码,但并非所有UTF-8编码的...
UTF-8是一种变长的编码方式,它可以使用1到4个字节来表示一个字符。对于ASCII字符,UTF-8使用单个字节,而对于其他Unicode字符,它使用更多字节。这种编码方式使得在处理混合语言的数据时非常方便,因为它可以无缝地...
Java源码编码转换器是一款实用工具,主要用于将Java源代码文件从GBK编码转换为UTF-8编码,或者从UTF-8编码转换为GBK编码。在软件开发过程中,尤其是在处理中文字符时,编码问题是一个常见的挑战。GBK是中文环境下...
这个问题可能是因为源代码文件使用了UTF-8编码,而Ant默认使用的是GBK或者其他非UTF-8的编码格式,当Ant尝试读取或编译这些文件时,无法正确解析包含UTF-8 BOM(Byte Order Mark)的文件,BOM的Unicode值是\\65279...
BOM是UTF-8、UTF-16和UTF-32等编码格式中的一个可选标记,用于告知解析器文件的编码类型。例如,UTF-8的BOM是三个字节(0xEF, 0xBB, 0xBF),而UTF-16LE和UTF-16BE的BOM分别是两个字节(0xFF, 0xFE)和(0xFE, 0xFF...
"sql,GBK2312,UTF-8,UTF-8 无BOM,脚本字符集转换,脚本格式转换"这个主题核心是关于如何在不同字符编码之间转换SQL脚本,以确保数据的正确性和兼容性。以下是一些相关的知识点: 1. **字符编码**:字符编码是...
UTF-8编码的优势在于跨平台兼容性和网络传输效率,因为英文字符只用一个字节,所以在英文为主的文本中,文件体积相对较小。 在处理涉及不同编码的文件时,有时需要进行GBK和UTF-8之间的转换。例如,当你从一个GBK...
但如果你不想读取BOM,可以创建一个无BOM的UTF-8编码对象: ```vb.net Dim encoding As Encoding = New UTF8Encoding(False) ``` 除了使用`StreamReader`,还可以使用`File.ReadAllText`或`File.ReadAllLines`方法...
本文将详细讨论“批量GBK转UTF8工具”的相关知识点,包括GBK与UTF8编码的区别、转换工具的重要性和如何进行批量转换。 GBK编码,全称为“汉字内码扩展规范”,是中国大陆基于GB2312标准的扩展,它包含了更多的汉字...
在编程领域,尤其是在使用C++这种语言时,处理不同编码格式的文本文件是一项常见的任务。在本场景中,我们关注的是如何在...正确地读取和转换UTF8或GBK编码的文件,需要理解字符编码原理,并可能利用额外的库来实现。
标题提到的"freemaker生成静态文件时转换文件原编码GBK为UTF-8",这涉及到的是在使用FreeMarker生成静态文件时,如何处理从GBK编码转换到UTF-8编码的问题。 GBK是GB2312编码的扩展,包含了更多的汉字,但在处理多...
3. **UTF-8转Unicode**:UTF-8编码的字符可以是一个字节到四个字节的序列,解码时需要识别每个字符的字节长度,然后根据UTF-8的编码规则将这些字节转换为Unicode码点。UTF-8编码的优势在于其对ASCII字符的兼容性,...
3. **转换编码**:对于检测到GBK编码的文件,使用`java.nio.file.Files`类的`readAllBytes`和`write`方法,配合`java.nio.charset.StandardCharsets`中的`UTF_8`常量,将文件内容从GBK编码转换为UTF-8编码。...
- BOM(Byte Order Mark):UTF-8编码的文件可以带有一个可选的BOM标记,用于指示数据流的字节顺序,但某些工具或程序可能不支持带BOM的UTF-8。 - 乱码问题:检查文件读取和写入时的编码设置,确保一致。 - 汉字全角...
UTF-8的特点是每个Unicode字符可以被编码为1到4个字节,其中ASCII字符(基本的英文字符)仅需1个字节。这使得UTF-8在处理多种语言的文本时具有很好的效率,同时也兼容了大部分早期基于ASCII的系统。 在VB6(Visual ...
1. **连接数据库**:使用易语言提供的数据库接口创建数据库连接,设置正确的字符集,例如在ODBC中设置“Character Set”参数为“utf8”。 2. **SQL语句准备**:在执行SQL语句前,确保所有字符串已经按照UTF-8编码。...
这个"易语言TXT快速转换UTF-8源码"项目,为学习易语言的初学者提供了一个很好的实践机会,让他们能够深入理解文件操作和编码转换的概念,同时也可作为日常工作中处理编码问题的一个实用工具。通过分析和运行这个源码...
标题"Python-convert2utf将目录下的全部源文件转成UTF8编码"指的是使用Python编写的一个脚本或工具,该工具能够遍历指定目录,检测并转换其中的GB、GBK以及其他非UTF-8编码的文本文件和源代码文件,统一转换为UTF-8...
这个方法逐个检查字节,根据UTF8编码的规则,第一个字节的最高位必须为1,后续字节的最高两位必须是10,以此来确定字符的长度。如果不符合这些规则,则认为不是UTF8编码。 在实际应用中,这个类可以方便地集成到你...