- 浏览: 2184730 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
计算机的底层存储只能是二进制字节,而常常大部分时候,我们都喜欢看那么我们能看懂的字符,这也就是字符串,在这个过程中,涉及2个概念,编码(Encode)和解码(Decode) ,通常而言,把明文的字符序列,转换成计算机理解的二进制序列这个过程称为编码,而把二进制序列转换成普通人能看懂的明文字符串这个过程称为解码。
java中,默认使用的是Unicode字符集,但很多操作系统并不使用Unicode字符集,那么当从系统中读取到Java程序时,就可能出现乱码问题。
JDK1.4提供了Charset来处理字节序列和字符序列之间的转换关系,该类包含了编码和解码的的方法,还提供了获取所有当前JDK所支持的字符集的方法,代码演示如下:
输出的结果如下:
当然,对于我们China的程序员来说,下面的几个字符串编码是我们经常用的:
我们可以利用Charset这个类,来进行获取编码或解码器,从而完成对应的从字节向字符的转换,或者从字符向字节的转换。
示例代码如下
输出结果如下:
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-1 | ISO拉丁字母表No.1,也叫做ISO-LATIN-1 |
UTF-8 | 8位的UCS转换格式 |
UTF-16 | 16位的UCS转换格式,字节顺序由可选的字节顺序标记来标识 |
UTF-16BE | 16位的UCS转换格式,Big-endian(最低地址存放高位字节)字节顺序 |
UTF-16LE | 16位的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 ====================================== 老子能看懂了: 三劫散仙
发表评论
-
记一次log4j不打印日志的踩坑记
2019-09-22 01:58 1572### 起因 前几天一个跑有java应用的生产集群(200多 ... -
在Java里面如何解决进退两难的jar包冲突问题?
2019-07-23 19:10 1234如上图所示: es api组件依赖guava18.0 ... -
如何轻松理解二叉树的深度遍历策略
2019-07-03 23:33 1129我们知道普通的线性数据结构如链表,数组等,遍历方式单一 ... -
为什么单线程Redis性能也很出色
2019-01-21 18:02 2208高性能的服务器,不一 ... -
如何将编程语言里面的字符串转成数字?
2019-01-11 23:23 2094将字符串转成数字在很 ... -
为什么Java里面String类是不可变的
2019-01-06 18:36 1669在Java里面String类型是不可变对象,这一点毫无疑问,那 ... -
关于Java里面volatile关键字的重排序
2019-01-04 18:49 1068Java里面volatile关键字主 ... -
多个线程如何轮流打印ABC特定的次数?
2018-12-11 20:42 6043之前的一篇文章,我给 ... -
聊聊Java里面的引用传递
2018-11-16 21:21 990长久以来,在Java语言里面一直有一个争论,就是Java语言到 ... -
理解计数排序算法的原理和实现
2018-10-11 10:03 2092计数排序(Counting sort) ... -
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
2018-09-06 11:31 3389### 前言 理解HashMap和Con ... -
关于Java里面多线程同步的一些知识
2018-07-18 09:45 1108# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
Java单例模式之双检锁深入思考
2018-07-08 12:25 3290# Java单例模式之双检锁 ... -
关于Java里面多线程同步的一些知识
2018-07-08 12:23 1122# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
重新认识同步与异步,阻塞和非阻塞的概念
2018-07-06 14:30 1474# 重新认识同步与异步 ... -
线程的基本知识总结
2018-06-27 16:27 1062### (一)创建线程的方式 (1)实现Runnable接口 ... -
Java里面volatile关键字修饰引用变量的陷阱
2018-06-25 11:42 1387# Java里面volatile关键字修饰引用变量的陷阱 如 ... -
关于Java里面的字符串拼接,你了解多少?
2018-06-25 11:28 1371# 关于Java里面的字符串 ... -
深入理解Java内存模型的语义
2018-06-25 11:39 740### 前言 Java内存模型( ... -
如何证明Java多线程中的成员变量数据是互不可见的
2018-06-21 10:09 1502前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义, ...
相关推荐
### Java字符串编码转换详解 #### 一、Java 字符串编码转换基础 在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web...
### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理国际化应用时,理解并掌握各种字符编码格式变得尤为重要。下面将介绍几种常见的字符编码格式以及如何在Java中实现...
要获取Java字符串的字节序列(即编码),可以使用`getBytes()`方法。此方法默认使用平台的默认编码,通常为UTF-8,但也可以指定其他编码,如`getBytes("GBK")`。如果需要确定字符串的原始编码,需要额外的信息,...
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
总结了java中常见的utf-8、gbk等进行字符串编码转换
Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8
字符串与各种编码之间相互转换,例如:字符串转base64,字符串转十六进制等等
总的来说,Java中获取字符串编码类型没有一个直接的标准方法,开发者需要借助一些技巧和外部库来实现。在处理编码问题时,理解各种编码格式的特性以及它们之间的差异至关重要,这样才能有效地避免乱码问题,保证数据...
通过解析字符串获取字符串编码类型的java代码
在Java编程语言中,将字符串转换为16进制ASCII值是一个常见的操作,尤其是在处理数据编码、网络通信或存储时。这个过程涉及到字符到数字的...理解这些概念和方法,对于在Java开发过程中处理字符串编码问题至关重要。
在Java编程语言中,字符串是极其重要且常用的数据类型,尤其在Android开发中更是不可或缺。字符串主要用于处理文本信息,如用户输入、文件内容、网络数据等。以下是对"JAVA 字符串应用笔记"中可能涉及的一些核心知识...
在Java编程语言中,处理字符串是非常常见的操作,尤其是在涉及到文本分析和处理的场景。本文将深入探讨如何在Java中进行中文...在Java中处理字符串,特别是涉及到特殊字符集如中文时,对字符编码的理解是必不可少的。
JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...
在Java编程语言中,文本字符串替换是一个常见的任务,特别是在处理大量文本数据时。这个"java 文本字符串替换工具"很可能是为了帮助开发者高效地搜索和替换文件中的特定文本内容。让我们详细了解一下如何在Java中...
在Java编程语言中,字符串操作是日常开发中的重要部分,因为字符串处理无处不在,从数据解析到用户界面的交互。`StringUtil` 类是这样一个工具类,它集合了多种常用的字符串处理方法,以提高开发效率并减少代码重复...
在Java中,字符编码转换...总之,了解和掌握Java中的字符串编码转换方法,对于开发跨平台的应用程序和处理多语言数据具有重要意义。通过恰当的编码转换机制,可以确保数据的正确显示和处理,避免乱码等常见的编码问题。
在Java编程语言中,字符串(String)是至关重要的数据类型,用于处理文本信息。字符串是不可变的,这意味着一旦创建,就不能更改其...通过学习和实践这些示例,开发者可以更好地掌握Java字符串操作的技巧,提升编程能力。
这里我们将深入探讨“Base16”(也称为Hex)编码,以及Java和JavaScript中如何进行字符串与十六进制之间的转换。 Base16是一种简单的二进制到文本的编码方式,它将每个八位字节表示为两个十六进制数字。这种编码...
根据提供的标题、描述、标签及部分内容,我们可以总结出以下关于Java字符串处理的相关知识点: ### Java字符串处理技术:中文与英文的兼容性 在Java中,处理字符串是非常常见且重要的任务之一,尤其是在涉及到国际...