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.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...
随机推荐
- 4 Template层-CSRF
1.csrf 全称Cross Site Request Forgery,跨站请求伪造 某些恶意网站上包含链接.表单按钮或者JavaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站 ...
- DEDE调用指定文章ID来调用特定文档
http://www.jb51.net/cms/137423.html 代码如下: {dede:arclist row=1 idlist='6'} <li><a href=" ...
- Careercup - Microsoft面试题 - 23123665
2014-05-12 07:44 题目链接 原题: Given an array having unique integers, each lying within the range <x&l ...
- 16、响应式布局和BootStrap 全局CSS样式知识点总结-part3
1.响应式工具 ①可用的类 <div class="container"> <a href="#" class="visible-x ...
- SSH的基本操作
一. 登陆SSH远程控制服务器 我们以192.168.100.42服务器为例. SSH乱码: LANG="zh_CN.GB18030" export LANG=zh_CN.gb23 ...
- Python+Selenium练习篇之7-利用name定位元素
本文介绍如何通过节点中name的值来定位这个web元素.还是来看百度首页搜索输入框,通过name的值来定位. 相关脚本代码: # coding=utf-8 from selenium import w ...
- python 打印9*9乘法表
# -*- coding: utf8 -*- # Author:wxq 1. for i in range(1,10): for j in range(1,i+1): print "%d*% ...
- Junit单元测试--01
如何编写单元测试 燕双龙 一 单元测试简介 单元测试是代码正确性验证的最重要的工具,也是系统测试当中最重要的环节.也是唯一需要编写代码才能进行测试的一种测试方法.在标准的开发过程中,单元测试的代码与实 ...
- CodeForces839B[思维] Codeforces Round #428 (Div. 2)
#include <bits/stdc++.h> using namespace std; int n, k; ; ], cnt[]; void solve() { int t; cnt[ ...
- Java注解解析-搭建自己的注解处理器(CLASS注解使用篇)
该文章是继Java注解解析-基础+运行时注解(RUNTIME)之后,使用注解处理器处理CLASS注解的文章.通过完整的Demo例子介绍整个注解处理器的搭建流程以及注意事项,你将知道如何去搭建自己的注解 ...