Charset类字符编码对象

介绍

java中使用Charset来表示编码对象

This class defines methods for creating decoders and encoders and for retrieving the various names associated with a charset.
Instances of this class are immutable.

This class also defines static methods for testing whether a particular charset is supported,
for locating charset instances by name, and for constructing a map that contains every charset
for which support is available in the current Java virtual machine.

Charset常用静态方法

public static Charset forName(String charsetName)//通过编码类型获得Charset对象
public static SortedMap<String,Charset> availableCharsets()//获得系统支持的所有编码方式
public static Charset defaultCharset()//获得虚拟机默认的编码方式
public static boolean isSupported(String charsetName)//判断是否支持该编码类型

Charset常用普通方法

public final String name()//获得Charset对象的编码类型(String)
public abstract CharsetEncoder newEncoder()//获得编码器对象
public abstract CharsetDecoder newDecoder()//获得解码器对象
. . . 还有很多方法

Charset应用案列

获得本机支持的所有编码方式

public void testGetAvailableCharsets() {

    // 获得本机所有编码格式
Map<String, Charset> charsets = Charset.availableCharsets();
// 迭代遍历出编码方式
for (Entry<String, Charset> entry : charsets.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue().name());
} }

获得JVM虚拟机默认编码方式

// 获得JVM默认编码方式
Charset charset=Charset.defaultCharset();

使用编码器和解码器进行字符编码和解码

public void testEncoderAndDecoder() throws Exception{

    //使用Charset进行编码和解码
CharsetEncoder encoder=Charset.forName("GBK").newEncoder();
CharsetDecoder decoder=Charset.forName("GBK").newDecoder(); ByteBuffer byteBuffer=encoder.encode(CharBuffer.wrap("中国编码".toCharArray())); CharBuffer charBuffer=decoder.decode(byteBuffer);
String string=charBuffer.toString(); System.out.println(string); }

备注:写编码方式时候最好使用全大写字符比如:UTF-8、GBK。通常情况下大小写都能识别

备注:java中关于字符编码问题,通常借助String构造方法或URLEncoder/URLDecoder,或则使用Charset的编码器和解码器。

总结

编码和解码问题是所有程序员都会面临的问题,尤其是对于非英语系国家的程序员更是如此。只有理解清楚字符编码原理才能在今后程序开发过程即使遇到编码问题也能够处之泰然。

备注:备注计算机只能识别二进制数字,因此如果想要让计算机识别出自然语言文字自然就需要存在一张二进制数字和自然语言的映射表。每次编码和解码时都要查询这张映射表。

举例:

假如使用GBK码表对"中"字编码结果是183(十进制表示)
如果你使用UTF-8码表来解码的话,查出来的183对应的是"国"字。
结果就是错的了,所以编码和解码对应的码表一定要相同才能够解码正确(除非码表之间有包含关系,比如UTF-8已经包含了ASCII码表,那么解码就没问题)

NIO之Charset类字符编码对象的更多相关文章

  1. Java NIO之Charset类字符编码对象

    介绍 java中使用Charset来表示编码对象 This class defines methods for creating decoders and encoders and for retri ...

  2. c#字符编码,System.Text.Encoding类,字符编码大全:如Unicode编码、GB18030、UTF-8,UTF-7,GB2312,ASCII,UTF32,Big5

    本页列出来目前window下所有支持的字符编码  ---c#通过 System.Text.Encoding.GetEncodings()获取,里面可以对其进行查询,筛选,对同一个字符,在不同编码进行查 ...

  3. .NET Framework 中的字符编码

    字符是可用多种不同方式表示的抽象实体. 字符编码是一种为受支持字符集中的每个字符进行配对的系统,配对时使用的是表示该字符的某些值. 例如,摩尔斯电码是一种为罗马字母表中的每个字符进行配对的字符编码,配 ...

  4. Python 2中万恶的字符编码

    Python2中如果文件存在中文,必须要指定#-*- coding:utf8 -*-或#coding:utf8,否则会报错.那这是为什么呢? 一.原理解析 我们知道,在计算机发展初期,计算机只能识别字 ...

  5. JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码

    JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...

  6. 字符集和字符编码(Charset & Encoding)

    字符集和字符编码(Charset & Encoding)[转] 1.基础知识 计算机中储存的信息都是用二进制数表示的:而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按 ...

  7. 转:字符集和字符编码(Charset & Encoding)

    转自:http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html ——每个软件开发人员应该无条件掌握的知识! ——Unicode伟大的创 ...

  8. 【转】字符集和字符编码(Charset & Encoding)

    相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"бЇЯАзЪСЯ"."�????????"?还记得HTTP中的Accept-Charset.Accept ...

  9. JAVA基础学习day22--IO流四-对象序列化、管道流、RandomAccessFile、DataStream、ByteArrayStream、转换流的字符编码

    一.对象序列化 1.1.对象序列化 被操作的对象需要实现Serializable接口 1.2.对象序列化流ObjectOutputStream与ObjectInputStream ObjectInpu ...

随机推荐

  1. hdu6138(后缀数组)

    hdu6138 题意 给出若干个字符串,每次查询两个字符串,求两个字符串的公共子串且在给出的某一个字符串中作为前缀的最大长度. 分析 求公共子串:后缀数组 判断前缀:字典树 求完后缀数组,遍历下 \( ...

  2. 谜题22:URL的愚弄

    本谜题利用了Java编程语言中一个很少被人了解的特性.请考虑下面的程序将会做些什么? public class BrowserTest { public static void main(String ...

  3. 洛谷 - Sdchr 的邀请赛 T4 信息传递

    (乱搞艹爆正解系列) 对不起,由于博主太弱了,并不会正解的多项式exp(甚至多项式exp我都不会2333). 只能来说一说我是怎么乱搞的啦QWQ 首先这个题最关键的性质是: 一个在原置换 g 中长度为 ...

  4. [BZOJ1559]密码

    数据范围特别小,考虑状压DP 因为要求给定的字符串在母串中出现,所以可以用AC自动机辅助DP 因为AC自动机不能处理模式串互相包含的情况,所以先把互相包含的串去掉(暴力就行,数据范围太小) 因为要状压 ...

  5. 【DFS】【最短路】【spfa】【BFS】洛谷P2296 NOIP2014提高组 day2 T2 寻找道路

    存反图,从终点dfs一遍,记录下无法到达的点. 然后枚举这些记录的点,把他们的出边所连的点也全部记录. 以上这些点都是无法在最短路中出现的. 所以把两个端点都没被记录的边加进图里,跑spfa.BFS什 ...

  6. Java学习笔记(6)

    java是面向对象的语言. 对象:真实存在的唯一的事物. 类:实际就是对某种类型事物的共性属性与行为的抽取 面向对象的计算机语言的核心思想:找适合的对象做适合的事情. 如何找适合的对象呢: 1.sun ...

  7. Inno Setup入门(一)——最简单的安装脚本

    地址:http://379910987.blog.163.com/blog/static/3352379720110238252326/ 一个最简单的安装脚本: 1.最简单的安装文件脚本: [setu ...

  8. 三星s3c24xx平台GPIO操作详解

    转:http://blog.chinaunix.net/uid-22030783-id-3391515.html 先介绍三星S3C24XX平台BSP中定义外设寄存器和GPIO的相关头文件 以linux ...

  9. 【翻译】自定义 UIViewController Transitions

    原文地址:http://www.shinobicontrols.com/blog/posts/2013/10/03/ios7-day-by-day-day-10-custom-uiviewcontro ...

  10. 深入理解Vue父子组件通讯的属性和事件

    在html中使用元素,会有一些属性,如class,id,还可以绑定事件,自定义组件也是可以的.当在一个组件中,使用了其他自定义组件时,就会利用子组件的属性和事件来和父组件进行数据交流. 父子组件之间的 ...