package example.encoding;
import java.io.UnsupportedEncodingException;
/** *//**
* The Class GetBytesTest.
*/
public class GetBytesTest {
/** *//**
* The main method.
*
* @param args the arguments
*/
public static void main(String args[]) {
String content = "中文";
String defaultEncoding = System.getProperty("file.encoding");
String defaultLnaguage = System.getProperty("user.language");
System.out.println("System default encoding --- " + defaultEncoding);
System.out.println("System default language --- " + defaultLnaguage);
GetBytesTest tester = new GetBytesTest();
byte[] defaultBytes = tester.getBytesWithDefaultEncoding(content);
tester.printBytes(defaultBytes);
byte[] iso8859Bytes = tester.getBytesWithGivenEncoding(content,
"ISO-8859-1");
tester.printBytes(iso8859Bytes);
byte[] gbkBytes = tester.getBytesWithGivenEncoding(content, "GBK");
tester.printBytes(gbkBytes);
byte[] utfBytes = tester.getBytesWithGivenEncoding(content, "UTF-8");
tester.printBytes(utfBytes);
}
/** *//**
* Gets the bytes with default encoding.
*
* @param content the content
*
* @return the bytes with default encoding
*/
public byte[] getBytesWithDefaultEncoding(String content) {
System.out.println("\nEncode with default encoding\n");
byte[] bytes = content.getBytes();
return bytes;
}
/** *//**
* Gets the bytes with given encoding.
*
* @param content the content
* @param encoding the encoding
*
* @return the bytes with given encoding
*/
public byte[] getBytesWithGivenEncoding(String content, String encoding) {
System.out.println("\nEncode with given encoding : " + encoding + "\n");
try {
byte[] bytes = content.getBytes(encoding);
return bytes;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
/** *//**
* Prints the bytes.
*
* @param bytes the bytes
*/
public void printBytes(byte[] bytes) {
for (int i = 0; i < bytes.length; i++) {
System.out.print(" byte[" + i + "] = " + bytes);
System.out
.println(" hex string = " + Integer.toHexString(bytes));
}
}
}
- 【1】在中文平台下,测试结果如下:System default encoding --- GBK
- System default language --- zh
-
- Encode with default encoding
-
- byte[0] = -42 hex string = ffffffd6
- byte[1] = -48 hex string = ffffffd0
- byte[2] = -50 hex string = ffffffce
- byte[3] = -60 hex string = ffffffc4
-
- Encode with given encoding : ISO-8859-1
-
- byte[0] = 63 hex string = 3f
- byte[1] = 63 hex string = 3f
-
- Encode with given encoding : GBK
-
- byte[0] = -42 hex string = ffffffd6
- byte[1] = -48 hex string = ffffffd0
- byte[2] = -50 hex string = ffffffce
- byte[3] = -60 hex string = ffffffc4
-
- Encode with given encoding : UTF-8
-
- byte[0] = -28 hex string = ffffffe4
- byte[1] = -72 hex string = ffffffb8
- byte[2] = -83 hex string = ffffffad
- byte[3] = -26 hex string = ffffffe6
- byte[4] = -106 hex string = ffffff96
- byte[5] = -121 hex string = ffffff87
-
-
- 【2】在英文平台下,测试结果如下:System default encoding --- Cp1252
- System default language --- en
-
- Encode with default encoding
-
- byte[0] = 63 hex string = 3f
- byte[1] = 63 hex string = 3f
-
- Encode with given encoding : ISO-8859-1
-
- byte[0] = 63 hex string = 3f
- byte[1] = 63 hex string = 3f
-
- Encode with given encoding : GBK
-
- byte[0] = -42 hex string = ffffffd6
- byte[1] = -48 hex string = ffffffd0
- byte[2] = -50 hex string = ffffffce
- byte[3] = -60 hex string = ffffffc4
-
- Encode with given encoding : UTF-8
-
- byte[0] = -28 hex string = ffffffe4
- byte[1] = -72 hex string = ffffffb8
- byte[2] = -83 hex string = ffffffad
- byte[3] = -26 hex string = ffffffe6
- byte[4] = -106 hex string = ffffff96
- byte[5] = -121 hex string = ffffff87
【结论】
getBytes()、getBytes(encoding)函数的作用是使用系统默认或者指定的字符集编码方式,将字符串编码成字节数组。
在中文平台下,默认的字符集编码是GBK,此时如果使用getBytes()或者getBytes("GBK"),则按照GBK的编码规则将每个中文字符用2个byte表示。所以我们看到"中文"最终GBK编码结果就是: -42 -48 -50 -60 。-42和-48代表了"中"字,而"-50"和"-60"则代表了"文"字。
在中文平台下,如果指定的字符集编码是UTF-8,那么按照UTF-8对中文的编码规则:每个中文用3个字节表示,那么"中文"这两个字符最终被编码成:-28 -72 -83、-26 -106 -121两组。每3个字节代表一个中文字符。
在中文平台下,如果指定的字符集编码是ISO-8859-1,由于此字符集是单字节编码,所以使用getBytes("ISO-8859-1") 时,每个字符只取一个字节,每个汉字只取到了一半的字符。另外一半的字节丢失了。由于这一半的字符在字符集中找不到对应的字符,所以默认使用编码63代替,也就是?。
在英文平台下,默认的字符集编码是Cp1252(类似于ISO-8859-1),如果使用GBK、UTF-8进行编码,得到的字节数组依然是正确的 (GBK4个字节,UTF-8是6个字节)。因为在JVM内部是以Unicode存储字符串的,使用getBytes(encoding)会让JVM进行一次Unicode到指定编码之间的转换。对于GBK,JVM依然会转换成4个字节,对于UTF-8,JVM依然会转换成6个字节。但是对于ISO- 8859-1,则由于无法转换(2个字节--->1个字节,截取了一半的字节),所以转换后的结果是错误的。
相同的平台下,同一个中文字符,在不同的编码方式下,得到的是完全不同的字节数组。这些字节数组有可能是正确的(只要该字符集支持中文),也可能是完全错误的(该字符集不支持中文)。
记住:
不要轻易地使用或滥用String类的getBytes(encoding)方法,更要尽量避免使用getBytes()方法。因为这个方法是平台依赖的,在平台不可预知的情况下完全可能得到不同的结果。如果一定要进行字节编码,则用户要确保encoding的方法就是当初字符串输入时的 encoding。
分享到:
相关推荐
3. **编码问题与冲突**:在处理不同来源的数据时,可能会遇到编码不一致导致的乱码问题。文章可能探讨了如何识别文件的编码格式,例如通过查看文件头信息、使用专门的工具(如Notepad++、File Encoding Detector等)...
同时,在处理不同编码的网页时,乱码问题也是常见的挑战之一。本文将详细解析如何通过C#语言编写网页爬虫来解决上述问题。 #### 抓取数据的基本步骤 1. **初始化WebClient对象**: ```csharp WebClient wc = new...
1. **编码识别与转换**:插件能够智能识别`.properties`文件的当前编码,并允许你在编辑时切换不同的编码格式,如UTF-8、GBK等,以确保中文字符的正确显示。 2. **自动换行与格式化**:`.properties`文件中的长文本...
例如,“ZZ-QM-01/A/13xx19953xx199811xxxxxx4303000”等部分,虽然不完整且难以理解,但“ZZ-QM-01/A/13”可能是指质量手册的某个版本号或文件编号,“19953xx199811xxxxxx4303000”可能是日期或某种编码。...
问题描述:jquery的字符集是utf-8,load方法加载完GB2312编码静态页面后,出现中文乱码。 a.php 代码如下: [removed] $(function(){ $(“#zz”).click(function(){ $(“#job”).load(“b.php”); }) }) [removed] ...
- **文件编码**:`:set fileencoding=utf-8`设置默认的文件编码为UTF-8,避免字符乱码问题。 - **快速保存和退出**:`:map ZZ :wq<CR>`映射ZZ为快速保存并退出,`:map q! :q!<CR>`映射q!为不保存退出。 **3. 快捷键...
为了正确处理文件上传下载过程中的字符编码问题,避免出现乱码,需要对 WebLogic 中的 MIME 类型进行适当配置。这通常涉及到修改项目的 `web.xml` 文件。 **步骤:** 1. **编辑 web.xml**:找到项目中的 `WEB-INF`...
java运用hashmap进行发牌,若有乱码请修改文件的编码格式为UTF-8
由于链接中含有乱码字符,无法直接访问。通常,用户需要通过有效的网盘账户来访问分享内容。一旦获取到源码,用户就可以在Matlab环境下运行它们来实现图像压缩。 总结来说,图像压缩是一个复杂的过程,涉及到多种...
在VIM编辑器的使用上,课程提到了设置字符编码避免乱码,如`:set encoding=utf8`,以及如何分隔窗口、启用内容折叠、忽略大小写、自动对齐、高亮搜索结果等。例如,`sp/vsp`用于水平或垂直分割窗口,`foldmethod=...
2. `<meta http-equiv="Content-Type" content="...">`定义了字符编码,`{CHARSET}`变量表示编码方式,与安装时设定的编码一致,确保无乱码问题。 3. `<title>{$head['title']}</title>`显示网站名称和标题,两者在...
在处理中文短信时,使用Unicode编码可以确保短信中的汉字能够被正确识别和传输,避免了由于字符集不兼容导致的乱码问题。 2. **4G模块**: 4G模块是一种嵌入式硬件设备,它集成了4G通信技术,可以连接到4G移动网络...
- 遗传编程(GP):在遗传算法的基础上发展而来,它使用程序结构作为个体的表现形式,并在进化过程中不断改进这些程序。 - 进化策略(ES):主要针对实数参数的优化问题,它在进化过程中会调整控制变异强度的参数。...
然而,这一部分的内容看似是经过了某种编码或加密处理,出现了一些乱码字符,因此无法直接获取到准确的分享链接。正常情况下,人们应该能看到一个完整的百度网盘分享链接,通常以“***”开头,后面跟随一串用于标识...
而提供的链接部分包含了乱码,说明该链接可能经过了一定的编码处理,实际使用时需要解码或在相应平台进行验证才能获取数据。 5. 数据集的作用与分析:通过研究这样的历史数据,我们可以了解日本对外投资的长期趋势...
由于本内容的给定部分存在乱码,无法提供准确的资料来源或具体内容。但是,可以详细介绍模糊控制理论的关键知识点: 1. 模糊集合理论:模糊集合理论由L.A. Zadeh于1965年提出,是模糊控制的理论基础。在模糊集合中...
然而,由于链接包含了特殊字符,如"ȡ亿万q6(VALUEA:",这可能是人为加密或编码的结果,或者是文字转码不正确导致的乱码。正常情况下,这样的链接是不能直接访问的,需要正确的解码方法才能还原成一个可用的百度网盘...
- 在读取Excel文件时,需要注意Excel文件的编码格式是否正确,以免出现乱码问题。 - 在合并数据时,确保所有数据列名一致,否则可能需要进行列名调整或数据清洗。 - 考虑到性能问题,对于非常大的数据集,可以考虑分...
由于地址中包含非标准字符和可能的乱码,正常情况下无法直接用来访问资源。在实际应用中,算法需要能够识别并纠正这类编码错误,还原为可用的分享链接。这个部分说明算法可能涉及到编码解码的知识和技能,以确保正确...
由于文件中部分内容部分包含了乱码,这可能是对分享地址的编码表示。基于上下文推断,这应该是指通过百度网盘获取源码的链接。 此外,考虑到文件内容的限制,我们无法提供更具体的源码细节或对源码的具体功能进行...