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.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...
随机推荐
- 第2章c++简单程序设计
第2章c++简单程序设计 知识梳理 以下是我遗忘以及认为重要的知识整理: 1.标识符的构成规则: 以大写字母.小写字母或下划线 _ 开始 由大写字母.小写字母.下划线 _ 或数字(0~9)组成 大写字 ...
- cf936c Lock Puzzle
ref #include <algorithm> #include <iostream> #include <cstring> #include <cstdi ...
- github readme.md 添加图片
简要: 将图片放在仓库里面,在文件里链接它,最后 push 到 github 上. github 图片链接格式: (http://github.com/yourname/your-repository ...
- 后缀数组(SA)学习记录
一只只会后缀自动机却不会后缀数组的弱鸡做了一下HDU - 1403,结果SAM被卡内存了,然后学习了一下SA. 以下两道题都是求LCS,区别在于字符串长度. 参考blog:https://www.cn ...
- mojoportal在IE10中点击ImageButton出错的处理方法
在ie10中,如果点击了mojoportal中的imagebutton,会出现错误,在ie10之前的浏览器,及ie10的兼容模式中及谷歌浏览器中都不会出现. 日志中 错误信息如下: 2013-09-2 ...
- 最简单的动态代理实例(spring基于接口代理的AOP原理)
JDK的动态代理是基于接口的 package com.open.aop; public interface BusinessInterface { public void processBus ...
- 兼容浏览器 回车键 keydown事件
$("body").keydown(function(event){ if(event.keyCode==13){ //body } }); 重点:$("bo ...
- Codeforces Round #402 (Div. 2) D. String Game(二分答案水题)
D. String Game time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...
- docker (centOS 7) 使用笔记5 - weave网络
weave官网 https://www.weave.works 1. 下载安装 sudo curl -L git.io/weave -o /usr/local/bin/weave sudo chmod ...
- BZOJ2916 [Poi1997]Monochromatic Triangles 数论
答案等于总三角形数-不合法数 一个不合法三角形一定存在两个顶点,在这个三角形中这个顶点的角的两边不同色 #include<cstring> #include<cmath> #i ...