Java 字符集,编码、解码
1、
计算机中文件、数据底层都是基于二进制的。
计算机底层并没有文本文件、图片文件之分,它只是记录着每个文件的二进制序列。
字符集:包含着字符和二进制序列之间的对应关系,一个字符对应一个二进制序列。
编码(Encode):把人能看懂的明文转换为计算机能理解二进制序列。
解码(Decode):把计算机中的二进制序列转换为人能看懂的明文。
乱码:解码方式与编码方式不同,即编码、解码使用的字符集不一致。
Windows中文本文件的默认字符集是GBK。
2、
字节的文件输出流可以指定写入模式:
FileOutputStream fos=new FileOutputStream(String/File file);
FileOutputStream fos=new FileOutputStream(String/File file,boolean b); //第二个参数指定是否是追加模式,true——追加,false——覆盖。
字符的文件流可以指定字符集:
FileWriter fw=new FileWriter(String/File file);
FileReader fr=new FileReader(String/File file);
//指定字符集
FileWriter fw=new FileWriter(String/File file, String/Charset charset);
FileReader fr=new FileReader(String/File file, String/Charset charset);
//字符的文件输出流还可以指定写入模式
FileWriter fw=new FileWriter(String/File file, boolean b ); //是否是追加模式
FileWriter fw=new FileWriter(String/File file, String/Charset charset, boolean b);
2个转换流可以指定编码/解码的字符集:
InputStreamReader isr=new InputStreamReader(InputStream is, String/Charset charset); //指定解码字符集
OutputStreamWriter osr=new OutputStreamWriter(OutputStream os, String/Charset charset); //指定编码字符集
3、NIO中的Charset类
//创建Charset对象,指定编码/解码用的字符集
Charset charset=Charset.forName("GBK"); //创建编码器
CharsetEncoder encoder=charset.newEncoder();
//使用编码器进行编码。编码是把字符序列转换为字节序列,参数只能是CharBuffer类型,返回值是ByteBuffer类型
ByteBuffer byteBuffer=encoder.encode(CharBuffer charBuffer); //创建解码器
CharsetDecoder decoder=charset.newDecoder();
//使用解码器进行解码。解码是把字节序列转换为字符序列,参数为ByteBuffer类型,返回值是CharBuffer类型
CharBuffer charBuffer=decoder.decode(ByteBuffer byteBuffer);
也可以不创建编码器、解码器:
//创建Charset对象,指定编码/解码用的字符集
Charset charset=Charset.forName("GBK"); //编码
ByteBuffer byteBuffer=charset.encode(String str); //此处可使用String做参数
ByteBuffer byteBuffer=charset.encode(CharBuffer charBuffer); //解码
CharBuffer charBuffer=charset.decode(ByteBuffer byteBuffer);
更加简单。
String类的对象还可以使用以下方法将String(字符序列)编码为byte[](字节序列):
- byte[] getBytes() //使用平台默认的字符集
- byte[] getBytes(String/Charset charset) //使用指定的字符集
返回编码好的字节序列。
Java 字符集,编码、解码的更多相关文章
- 有关Java字符集编码的问题
在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的? A.每个中文字符占用2个字节,每个英文字符占用1个字节 B.假设数据库中 ...
- Java Base64编码解码实现
我尝试过两种方式:java自带的sun.misc的工具类,还有commons-codec.jar 1.sun.misc的工具类 String encoderStr = null; BASE64Enco ...
- Java Base64 编码解码方案总结
Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应用上,Base64除了能将Binary资料可视化之外 ...
- java base64编码解码
第一种.DatatypeConverter 使用JDK自带DatatypeConverter.java类实现,JDK版本必须>=1.6 /** * @Description base64编码 * ...
- java字符集编码乱码问题
博客分类: web javajspservlet 最近做网页这块时碰到了正文字符乱码问题.别看这小小的一个问题,对我来说却花费了好长一段时间.现在让我慢慢分析它吧(说实话.这些有部分是从网上找的,但 ...
- JAVA基础---编码解码
所谓编码 即char->byte 所谓解码 即byte->char ISO-8859-1 中文字符会被黑洞吸收 全部变为"?" GB2312 汉字可以被编码为双字节 但 ...
- java URI 编码解码
import java.io.UnsupportedEncodingException; /** * url转码.解码 */ public class UrlUtil { private final ...
- Java 字符集编码
一.字符编码实例1.NioTest13_In.txt文件内容拷贝到NioTest13_Out.txt文件中 public class NioTest13 { public static void ma ...
- 常用的js、java编码解码方法
前言 前后端直接传输数据进行交互不就行了吗,为什么还要进行编码解码?正常情况下直接交互没问题,但当有类似以下情况出现时就需要进行编码再进行传输: 1.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...
随机推荐
- 【Maximal Rectangle】cpp
题目: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones ...
- IOS开发学习笔记006 - 指针
C语言 指针 简单使用如下: int *p;//定义 int a = 10; p = &a;//赋值 int * b = &a;//定义并赋值 定义格式:类型 *指针变量名: 注意事项 ...
- jmter+ANT+jekins之配置文件简单优化(build.xml)
<?xml version="1.0" encoding="utf-8"?> <project name="ant-jmeter-t ...
- Linux 必要软件的安装与配置
主要是记录一下,免得下次重装系统后又到处搜索.. 一.必要软件的安装 JDK 下载 tar.gz:http://www.oracle.com/technetwork/java/javase/downl ...
- 贪吃蛇—C—基于easyx图形库(下):从画图程序到贪吃蛇【自带穿墙术】
上节我们用方向控制函数写了个小画图程序,它虽然简单好玩,但我们不应该止步于此.革命尚未成功,同志还需努力. 开始撸代码之前,我们先理清一下思路.和前面画图程序不同,贪吃蛇可以有很多节,可以用一个足够大 ...
- Zookeeper ZooDefs.Ids
OPEN_ACL_UNSAFE : 完全开放的ACL,任何连接的客户端都可以操作该属性znode CREATOR_ALL_ACL : 只有创建者才有ACL权限 READ_ACL_UNSAFE:只能读 ...
- 用Excel的分列功能格式化时间
从数据库导出的时间是带有毫秒的,怎么变成短的时间呢? 首先在时间列后面插入一列: 第二,点击数据菜单,点击分列,下一步,然后输入分割符号,然后就变成了两列.
- 【bzoj4399】魔法少女LJJ 并查集+权值线段树合并
题目描述 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新.淡雅,到处散发着醉人的奶浆味: ...
- 简单数据结构题(from 钟子谦——IOI2018集训队自选题)
简单数据结构题(from 钟子谦--IOI2018集训队自选题) 试题描述 给一棵 \(n\) 个点的树,点权开始为 \(0\) ,有 \(q\) 次操作,每次操作是选择一个点,把周围一圈点点权 \( ...
- POJ3170 Bzoj1671 [Usaco2005 Dec]Knights of Ni 骑士
1671: [Usaco2005 Dec]Knights of Ni 骑士 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 281 Solved: 180 ...