字符集在将字节与字符之间进行转换时起到编码和解码的作用。不同的字符集在转换时采取不同的方式。比如UTF-8是8位Unicode转换格式(一个字符=一个字节),UTF-16是16位Unicode转换格式(一个字符=两个字节)。无论如何,字节是机器的语言,字符才是人类的语言。
?
举例:
class="java">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 sm = Charset.availableCharsets();
Set 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());
}
}
?
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()
返回这个缓冲区管理的码元数组组成的字符串。
?