字符集在将字节与字符之间进行转换时起到编码和解码的作用。不同的字符集在转换时采取不同的方式。比如UTF-8是8位Unicode转换格式(一个字符=一个字节),UTF-16是16位Unicode转换格式(一个字符=两个字节)。无论如何,字节是机器的语言,字符才是人类的语言。
举例:
package stream; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.util.Set; import java.util.SortedMap; public class CharsetTest { /** * @param args */ public static void main(String[] args) { // 打印JVM 使用的默认字符集。修改默认字符集可以通过eclipse右键点项目选择properties->Resources里面改。 System.out.println("Default charset is:" + System.getProperty("file.encoding")); // 打印所有可用的字符集 SortedMap<String, Charset> sm = Charset.availableCharsets(); Set<String> keyset = sm.keySet(); System.out.println("All available charsets:"); for (String s : keyset) { System.out.println(s); } // 使用字符集 String s = "Hello World"; Charset cs_utf16 = Charset.forName("UTF-16"); // 编码(字符->字节) ByteBuffer bb = cs_utf16.encode(s); byte[] byteArray = bb.array(); // 将编码后的字节数组再解码(字节->字符),使用与编码同样的字符集才可以。 ByteBuffer bb2 = ByteBuffer.wrap(byteArray); CharBuffer cb = cs_utf16.decode(bb2); System.out.println(cb.toString()); } }
常用API:
java.nio.charset.Charset 1.4
static SortedMap availableCharsets() | 获取这个虚拟机可用的所有字符集。返回一个映射表,它的键是字符集的名字,值是字符集。 |
static Charset forName() | 获取给定名字的字符集。 |
Set aliases() | 返回这个字符集的别名集。 |
ByteBuffer encode(String str) | 将给定的字符串编码为字节序列。 |
CharBuffer decode(ByteBuffer buffer) |
解码给定的字节序列。无法识别的输入将被转换为 Unicode的“替代字符”('\uFFFD'). |
java.nio.ByteBuffer 1.4
byte[] array() | 返回这个字节缓冲区所管理的字节数组。 |
ByteBuffer wrap(byte[] bytes) | 返回字节缓冲区,并且该缓冲区包含该字节数组。 |
ByteBuffer wrap(byte[] bytes, int offset, int length) | 返回给定范围的字节数组的字节缓冲区。 |
java.nio.CharBuffer
char[] array() | 返回这个缓冲区所管理的码元数组。 |
char charAt(int index) | 返回给定索引处的码元。 |
String toString() | 返回这个缓冲区管理的码元数组组成的字符串。 |
相关推荐
理解不同编码系统的原理和应用场景,以及如何使用相应的工具进行编码解码,对于解决文本处理中的乱码问题和实现全球化软件的开发都具有重要意义。在日常工作中,掌握这些知识能帮助我们更好地理解和处理与字符编码...
### Java字符集和编码 #### 一、引言 在探讨Java字符集和编码之前,我们先了解一下为什么在Java编程中需要关注字符集和编码。Java作为一种广泛应用的编程语言,其内部采用的是Unicode编码,这使得Java能够很好地...
在Java编程语言中,字符集编码涉及到java.nio.charset.Charset类,它为不同编码提供了编程支持。java.io.InputStreamReader类用于基于字符集的字符流输入,可以在读取文件或数据流时指定字符集,以正确显示字符内容...
Java提供了java.nio.charset包来处理字符编码,例如使用Charset类进行编码和解码操作。了解这些基础知识,有助于我们编写出能够正确处理各种字符集的健壮代码,避免在国际化和本地化过程中出现错误。 总的来说,...
本文旨在深入探讨与Java相关的字符集编码知识,包括但不限于编码的基本概念、几种常见的字符集编码类型及其特点,以及Java如何处理这些字符集编码问题。 #### 二、编码基本知识 1. **ISO 8859-1** ISO 8859-1是...
`getBytes()`会根据默认字符集编码字符串为字节数组,而`new String(byte[], charset)`则可以指定字符集解码字节数组: ```java String str = "你好,世界"; byte[] bytes = str.getBytes("UTF-8"); // 编码 String...
在处理客户端发送的请求参数时,如果请求头没有明确指定字符集编码,服务器会默认使用ISO8859-1进行解码,这可能导致中文乱码。因此,在读取请求参数之前,需要调用`setCharacterEncoding()`方法设置正确的字符集...
GB2312编码是一种在中国大陆广泛使用的简体中文字符集,它包含了6763个常用汉字和一些其他字符。在JavaScript中进行GB2312编码和解码可以帮助我们正确地在不同环境间传输和展示中文字符。 首先,让我们理解GB2312...
本文将详细介绍Java中与编码解码相关的几个关键概念和方法,帮助开发者更好地理解并解决编码问题。 #### 1. 字符串的编码与解码 在Java中,字符串的编码和解码主要通过`getBytes()`和`new String()`方法来实现。 ...
这个字符集为汉字提供了一个二进制编码方式,使得计算机可以处理和显示汉字,极大地推动了中文信息处理的发展。 GB2312编码采用了两个字节来表示一个汉字,每个字节占用8位,总共16位,形成了6763个常用汉字和一些...
总的来说,短信编码与解码涉及字符集的转换、编码规则的理解以及适当的数据结构和算法设计。C语言提供了底层操作的灵活性,可以高效地实现这些功能,但同时也需要开发者对底层机制有深入的理解。通过学习和实践,...
例如,我们可以使用`Charset`类的`newDecoder()`和`newEncoder()`方法来创建解码器和编码器,进行字符集之间的转换。此外,`InputStreamReader`和`OutputStreamWriter`类允许我们指定字符集,从而读写特定编码的文件...
例如,`Charset`类是Java中的核心编码类,它定义了字符集和字节之间的转换规则。通过查看其源码,我们可以了解如何实现自定义编码解码器。 同时,有一些工具可以帮助我们进行编码解码操作,比如Apache Commons ...
在JavaScript中,可以使用内置的`atob()`和`btoa()`方法进行Base64解码和编码。`atob()`方法接受一个Base64编码的字符串,返回解码后的二进制数据;`btoa()`则相反,将二进制数据或非URL安全的字符串转换为Base64...
例如,`getBytes(charset)`方法会根据指定的字符集将字符串编码成字节数组,而`new String(byte[], charset)`则是将字节数组解码为字符串。 在处理编码问题时,Java提供了一些关键的类和接口,如`Charset`、`...
字符集是指一组符号和编码方法,用于表示文本数据。在MySQL中,字符集的选择直接影响到数据的存储方式和检索效率。 ##### 1. 字符集的层级 MySQL支持不同层级上的字符集设置,包括: - **服务器层**:`character_...
在IT领域,字符集、字符编码以及HTTP编码解码是理解和解决乱码问题的关键概念。本文将深入探讨这些概念,并提供.NET框架中的实际应用示例。 字符集是计算机系统能够识别和表示的所有字符的集合,它包括各国文字、...
这是因为 Java 在处理字符串时默认按照特定的字符集进行解码,而在本例中,Java 应用期望使用 `ZHS16GBK` 解码,但实际上却按照 `US7ASCII` 编码的数据进行了解码,从而导致乱码现象的发生。 #### 解决方案 为了...
`charset`参数用于指定字符集,确保正确处理非ASCII字符。 2. `decode(String source)`: 这个方法用于解码已经编码的URL字符串。它会识别并转换百分号编码的字符,恢复原始的字符串形式。 URL编码的标准是根据RFC ...
另外,`Charset`类是Java提供的一套接口和类,用于处理字符集编码,如获取所有可用的字符集,检测文件的编码等。 此外,`InputStreamReader`和`OutputStreamWriter`类是处理字符流的桥梁,它们允许我们在字节流和...