`
qindongliang1922
  • 浏览: 2184730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117556
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125937
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59942
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71312
社区版块
存档分类
最新评论

Java字符串的编码

    博客分类:
  • JAVA
阅读更多
计算机的底层存储只能是二进制字节,而常常大部分时候,我们都喜欢看那么我们能看懂的字符,这也就是字符串,在这个过程中,涉及2个概念,编码(Encode)和解码(Decode) ,通常而言,把明文的字符序列,转换成计算机理解的二进制序列这个过程称为编码,而把二进制序列转换成普通人能看懂的明文字符串这个过程称为解码。


java中,默认使用的是Unicode字符集,但很多操作系统并不使用Unicode字符集,那么当从系统中读取到Java程序时,就可能出现乱码问题。

JDK1.4提供了Charset来处理字节序列和字符序列之间的转换关系,该类包含了编码和解码的的方法,还提供了获取所有当前JDK所支持的字符集的方法,代码演示如下:


package com.qin.sanxian.newio;

import java.nio.charset.Charset;
import java.util.SortedMap;

public class TestCharset {
	
	public static void main(String[] args)throws Exception {
		
		//获取当前JDK支持的所有字符集
		SortedMap<String, Charset> map=Charset.availableCharsets();
		System.out.println(map.size());
		for(String s:map.keySet()){
			System.out.println(s+"===> "+map.get(s));
		}
		
	}

}


输出的结果如下:
166
Big5===> Big5
Big5-HKSCS===> Big5-HKSCS
EUC-JP===> EUC-JP
EUC-KR===> EUC-KR
GB18030===> GB18030
GB2312===> GB2312
GBK===> GBK
IBM-Thai===> IBM-Thai
IBM00858===> IBM00858
IBM01140===> IBM01140
IBM01141===> IBM01141
IBM01142===> IBM01142
IBM01143===> IBM01143
IBM01144===> IBM01144
IBM01145===> IBM01145
IBM01146===> IBM01146
IBM01147===> IBM01147
IBM01148===> IBM01148
IBM01149===> IBM01149
IBM037===> IBM037
IBM1026===> IBM1026
IBM1047===> IBM1047
IBM273===> IBM273
IBM277===> IBM277
IBM278===> IBM278
IBM280===> IBM280
IBM284===> IBM284
IBM285===> IBM285
IBM297===> IBM297
IBM420===> IBM420
IBM424===> IBM424
IBM437===> IBM437
IBM500===> IBM500
IBM775===> IBM775
IBM850===> IBM850
IBM852===> IBM852
IBM855===> IBM855
IBM857===> IBM857
IBM860===> IBM860
IBM861===> IBM861
IBM862===> IBM862
IBM863===> IBM863
IBM864===> IBM864
IBM865===> IBM865
IBM866===> IBM866
IBM868===> IBM868
IBM869===> IBM869
IBM870===> IBM870
IBM871===> IBM871
IBM918===> IBM918
ISO-2022-CN===> ISO-2022-CN
ISO-2022-JP===> ISO-2022-JP
ISO-2022-JP-2===> ISO-2022-JP-2
ISO-2022-KR===> ISO-2022-KR
ISO-8859-1===> ISO-8859-1
ISO-8859-13===> ISO-8859-13
ISO-8859-15===> ISO-8859-15
ISO-8859-2===> ISO-8859-2
ISO-8859-3===> ISO-8859-3
ISO-8859-4===> ISO-8859-4
ISO-8859-5===> ISO-8859-5
ISO-8859-6===> ISO-8859-6
ISO-8859-7===> ISO-8859-7
ISO-8859-8===> ISO-8859-8
ISO-8859-9===> ISO-8859-9
JIS_X0201===> JIS_X0201
JIS_X0212-1990===> JIS_X0212-1990
KOI8-R===> KOI8-R
KOI8-U===> KOI8-U
Shift_JIS===> Shift_JIS
TIS-620===> TIS-620
US-ASCII===> US-ASCII
UTF-16===> UTF-16
UTF-16BE===> UTF-16BE
UTF-16LE===> UTF-16LE
UTF-32===> UTF-32
UTF-32BE===> UTF-32BE
UTF-32LE===> UTF-32LE
UTF-8===> UTF-8
windows-1250===> windows-1250
windows-1251===> windows-1251
windows-1252===> windows-1252
windows-1253===> windows-1253
windows-1254===> windows-1254
windows-1255===> windows-1255
windows-1256===> windows-1256
windows-1257===> windows-1257
windows-1258===> windows-1258
windows-31j===> windows-31j
x-Big5-HKSCS-2001===> x-Big5-HKSCS-2001
x-Big5-Solaris===> x-Big5-Solaris
x-euc-jp-linux===> x-euc-jp-linux
x-EUC-TW===> x-EUC-TW
x-eucJP-Open===> x-eucJP-Open
x-IBM1006===> x-IBM1006
x-IBM1025===> x-IBM1025
x-IBM1046===> x-IBM1046
x-IBM1097===> x-IBM1097
x-IBM1098===> x-IBM1098
x-IBM1112===> x-IBM1112
x-IBM1122===> x-IBM1122
x-IBM1123===> x-IBM1123
x-IBM1124===> x-IBM1124
x-IBM1364===> x-IBM1364
x-IBM1381===> x-IBM1381
x-IBM1383===> x-IBM1383
x-IBM33722===> x-IBM33722
x-IBM737===> x-IBM737
x-IBM833===> x-IBM833
x-IBM834===> x-IBM834
x-IBM856===> x-IBM856
x-IBM874===> x-IBM874
x-IBM875===> x-IBM875
x-IBM921===> x-IBM921
x-IBM922===> x-IBM922
x-IBM930===> x-IBM930
x-IBM933===> x-IBM933
x-IBM935===> x-IBM935
x-IBM937===> x-IBM937
x-IBM939===> x-IBM939
x-IBM942===> x-IBM942
x-IBM942C===> x-IBM942C
x-IBM943===> x-IBM943
x-IBM943C===> x-IBM943C
x-IBM948===> x-IBM948
x-IBM949===> x-IBM949
x-IBM949C===> x-IBM949C
x-IBM950===> x-IBM950
x-IBM964===> x-IBM964
x-IBM970===> x-IBM970
x-ISCII91===> x-ISCII91
x-ISO-2022-CN-CNS===> x-ISO-2022-CN-CNS
x-ISO-2022-CN-GB===> x-ISO-2022-CN-GB
x-iso-8859-11===> x-iso-8859-11
x-JIS0208===> x-JIS0208
x-JISAutoDetect===> x-JISAutoDetect
x-Johab===> x-Johab
x-MacArabic===> x-MacArabic
x-MacCentralEurope===> x-MacCentralEurope
x-MacCroatian===> x-MacCroatian
x-MacCyrillic===> x-MacCyrillic
x-MacDingbat===> x-MacDingbat
x-MacGreek===> x-MacGreek
x-MacHebrew===> x-MacHebrew
x-MacIceland===> x-MacIceland
x-MacRoman===> x-MacRoman
x-MacRomania===> x-MacRomania
x-MacSymbol===> x-MacSymbol
x-MacThai===> x-MacThai
x-MacTurkish===> x-MacTurkish
x-MacUkraine===> x-MacUkraine
x-MS932_0213===> x-MS932_0213
x-MS950-HKSCS===> x-MS950-HKSCS
x-MS950-HKSCS-XP===> x-MS950-HKSCS-XP
x-mswin-936===> x-mswin-936
x-PCK===> x-PCK
x-SJIS_0213===> x-SJIS_0213
x-UTF-16LE-BOM===> x-UTF-16LE-BOM
X-UTF-32BE-BOM===> X-UTF-32BE-BOM
X-UTF-32LE-BOM===> X-UTF-32LE-BOM
x-windows-50220===> x-windows-50220
x-windows-50221===> x-windows-50221
x-windows-874===> x-windows-874
x-windows-949===> x-windows-949
x-windows-950===> x-windows-950
x-windows-iso2022jp===> x-windows-iso2022jp

当然,对于我们China的程序员来说,下面的几个字符串编码是我们经常用的:
编码名描述
GBK简体中文的字符集
BIG5繁体中文字符集
ISO-8859-1ISO拉丁字母表No.1,也叫做ISO-LATIN-1
UTF-88位的UCS转换格式
UTF-1616位的UCS转换格式,字节顺序由可选的字节顺序标记来标识
UTF-16BE16位的UCS转换格式,Big-endian(最低地址存放高位字节)字节顺序
UTF-16LE16位的UCS转换格式,Little-endian(最高地址存放低位字节)字节顺序



我们可以利用Charset这个类,来进行获取编码或解码器,从而完成对应的从字节向字符的转换,或者从字符向字节的转换。
示例代码如下


package com.qin.sanxian.newio;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;

/**
 * @author 三劫散仙
 * 编码转换
 * 
 * **/
public class TestCharset2 {
	
	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception{
		
		/**
		 * 创建简体中文对应的编码
		 * **/
		Charset cn=Charset.forName("GBK");
		
		//获取cn对应的编码器和解码器
		CharsetDecoder decode=cn.newDecoder();
		CharsetEncoder encode=cn.newEncoder();
		//创建一个CharBuffer对象
		CharBuffer  buff=CharBuffer.allocate(8);//容量为8的空间
		buff.put('三');
		buff.put('劫');
		buff.put('散');
		buff.put('仙');
		buff.flip();//封印未写入空间
		//将CharBuffer中的字符串转换成字节序列
		ByteBuffer b=encode.encode(buff);
		//循环访问,并打印
		for(int i=0;i<b.limit();i++){
			
			System.out.println("你能看懂吗?  :"+b.get(i));
		}
		//将ByteBuffer数据解码成字符串序列,我们能看懂的^_^
		System.out.println("======================================");
		
		System.out.println("老子能看懂了:  "+decode.decode(b));
		
	}

}


输出结果如下:

你能看懂吗?  :-56
你能看懂吗?  :-3
你能看懂吗?  :-67
你能看懂吗?  :-39
你能看懂吗?  :-55
你能看懂吗?  :-94
你能看懂吗?  :-49
你能看懂吗?  :-55
======================================
老子能看懂了:  三劫散仙


分享到:
评论

相关推荐

    java字符串编码转换

    ### Java字符串编码转换详解 #### 一、Java 字符串编码转换基础 在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web...

    java字符串的各种编码转换

    ### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理国际化应用时,理解并掌握各种字符编码格式变得尤为重要。下面将介绍几种常见的字符编码格式以及如何在Java中实现...

    java字符串编码获取

    要获取Java字符串的字节序列(即编码),可以使用`getBytes()`方法。此方法默认使用平台的默认编码,通常为UTF-8,但也可以指定其他编码,如`getBytes("GBK")`。如果需要确定字符串的原始编码,需要额外的信息,...

    Java 所有字符串转UTF-8 万能工具类-GetEncode.java

    不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);

    java字符串编码转换代码

    总结了java中常见的utf-8、gbk等进行字符串编码转换

    将字符串从常用编码转为utf-8编码(java)

    Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8

    Encodes.java字符串编码转换

    字符串与各种编码之间相互转换,例如:字符串转base64,字符串转十六进制等等

    java获取字符串编码类型代码(导入直接查看结果)

    总的来说,Java中获取字符串编码类型没有一个直接的标准方法,开发者需要借助一些技巧和外部库来实现。在处理编码问题时,理解各种编码格式的特性以及它们之间的差异至关重要,这样才能有效地避免乱码问题,保证数据...

    java获取字符串编码类型代码

    通过解析字符串获取字符串编码类型的java代码

    java 字符串转16进制Ascii

    在Java编程语言中,将字符串转换为16进制ASCII值是一个常见的操作,尤其是在处理数据编码、网络通信或存储时。这个过程涉及到字符到数字的...理解这些概念和方法,对于在Java开发过程中处理字符串编码问题至关重要。

    JAVA 字符串应用笔记

    在Java编程语言中,字符串是极其重要且常用的数据类型,尤其在Android开发中更是不可或缺。字符串主要用于处理文本信息,如用户输入、文件内容、网络数据等。以下是对"JAVA 字符串应用笔记"中可能涉及的一些核心知识...

    java 字符串中文判断

    在Java编程语言中,处理字符串是非常常见的操作,尤其是在涉及到文本分析和处理的场景。本文将深入探讨如何在Java中进行中文...在Java中处理字符串,特别是涉及到特殊字符集如中文时,对字符编码的理解是必不可少的。

    JAVA字符串操作类CTool.java字符转换类.rar

    JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...

    java 文本字符串替换工具

    在Java编程语言中,文本字符串替换是一个常见的任务,特别是在处理大量文本数据时。这个"java 文本字符串替换工具"很可能是为了帮助开发者高效地搜索和替换文件中的特定文本内容。让我们详细了解一下如何在Java中...

    java 字符串操作类

    在Java编程语言中,字符串操作是日常开发中的重要部分,因为字符串处理无处不在,从数据解析到用户界面的交互。`StringUtil` 类是这样一个工具类,它集合了多种常用的字符串处理方法,以提高开发效率并减少代码重复...

    java转换字符串编码格式的方法

    在Java中,字符编码转换...总之,了解和掌握Java中的字符串编码转换方法,对于开发跨平台的应用程序和处理多语言数据具有重要意义。通过恰当的编码转换机制,可以确保数据的正确显示和处理,避免乱码等常见的编码问题。

    Java 字符串与文本相关实例源码

    在Java编程语言中,字符串(String)是至关重要的数据类型,用于处理文本信息。字符串是不可变的,这意味着一旦创建,就不能更改其...通过学习和实践这些示例,开发者可以更好地掌握Java字符串操作的技巧,提升编程能力。

    Base16 java字符串与十六进制互转 js字符串与十六进制互转

    这里我们将深入探讨“Base16”(也称为Hex)编码,以及Java和JavaScript中如何进行字符串与十六进制之间的转换。 Base16是一种简单的二进制到文本的编码方式,它将每个八位字节表示为两个十六进制数字。这种编码...

    java字符串处理-中英文-非常有用的

    根据提供的标题、描述、标签及部分内容,我们可以总结出以下关于Java字符串处理的相关知识点: ### Java字符串处理技术:中文与英文的兼容性 在Java中,处理字符串是非常常见且重要的任务之一,尤其是在涉及到国际...

Global site tag (gtag.js) - Google Analytics