java 输出编码_从代码看java输入输出中的编码和解码
在java中,采用Unicode编码,英文字符和汉字都占两个字节,下面的代码都是在中文操作系统上执行的,系统采用GBK编码。
1.看一下下面这段代码的编码和解码:当我们在键盘上敲入字符的时候,其采用的是GBK编码,比如我们敲入'b',它占两个字节。read()每次读取一个字节,返回一个int数据,该int数据,int的构成是最低位字节是read读取的字节,其余24位补0,'b'就回了两个int数据。write(data),每次向输出流中写入一个字节,写入的字节是data的最低位字节,这样写入的字节就和输入'b'编码后的字节一致。然后系统在按照GBK进行解码输出显示'b'。
1 int data;
2 while((data=System.in.read())!=-1)
3 {
4 System.out.write(data);
5 }
2.再来看看这段代码的编码和解码:代码读取的文件中的数据存在计算机中,它采用GBK编码。input.read(array)将这些字节读入到array数组中。new String(array,0,len)采用的是系统默认字符集GBK(中文环境下)进行解码出字符串,字符串在计算机中采用Unicode进行编码存储。系统按照GBK进行解码字符串,并输出显示。
1 FileInputStream inPut = new FileInputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
2 byte[] array = new byte[100];
3 int len = inPut.read(array);
4 System.out.println(new String(array,0,len));
5 inPut.close();
3.getBytes()采用系统默认字符集GBK编码“Hello FileOutputStreamaaa”,outPut.write(“Hello FileOutputStreamaaa”.getBytes())将这些字节写入到输出流中,系统采用GBK解码输出这些字节。
FileOutputStream outPut = new FileOutputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
outPut.write("Hello FileOutputStreamaaa".getBytes());
outPut.close();
4.dos.writeByte(b)以一个字节的长度,向输出流中写入b,,dos.writeBoolean(a)以一个字节的长度,向输出流中写入a,而我们的本地系统采用GBK进行编码,所以会出现乱码,dos.writeInt(c)以四个字节的长度,向输出流中写入c,dos.writeChar(d)以两个字节的长度,向输出流中写入d。而我们当我们打开被写入的文件时,它是按照GBK进行解码(双字节)就会出现乱码。
FileOutputStream outPut = new FileOutputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
BufferedOutputStream buffOutput = new BufferedOutputStream(outPut);
DataOutputStream dos = new DataOutputStream(buffOutput);
byte b = 1;
boolean a = false;
int c = 12;
char d = 'd';
dos.writeByte(b);
dos.writeBoolean(a);
dos.writeInt(c);
dos.writeChar(d);
dos.close();
5.这是一个字符流,我们指定了outWrite采用ASCII进行编码。"Hello博客园"采用Unicode编码存储在计算机中,writer.write()每次向输出流中写入两个字节(一个字符),"Hello"每个字符从Unicode向ASCII转换,保留低位,仍能正确表示原来字符。而"博客园"每个汉字从Unicode向ASCII转换的时候,则被丢弃一位,不能正确表示,当我们打开被写入的记事本文件的时候,按照GBK进行解码显示输出。
FileOutputStream outStream = new FileOutputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
OutputStreamWriter outWriter = new OutputStreamWriter(outStream,"ASCII");
BufferedWriter writer = new BufferedWriter(outWriter);
writer.write("HEllO博客园");
writer.close();
6.在这里我们将平台的默认字符编码集改为"ISO-8859-1",我们在键盘上敲入数据,这些数据按照GBK进行编码(每个字符站两个字节),我们将么这些字节存放到array中。然后String(array,0,index)采用"ISO-8859-1"(单字节)进行解码,就会出现乱码。
Properties pro = System.getProperties();//获取java虚拟机的系统属性pro.setProperty("file.encoding", "ISO-8859-1");
int data,index = 0;
byte[] array = new byte[100];
while((data=System.in.read())!='q')
{
array[index] = (byte)data;
index++;
}
String str = new String(array,0,index);
System.out.println(str);
java 输出编码_从代码看java输入输出中的编码和解码相关推荐
- 如何用java输出方格_第三章 Java类基础知识作业之(输出5*5数字方格,打印星塔)...
public class Main { public static void main(String[] args) { // main函数的输入参数:Run as -> Run Configu ...
- java 摄像头 win7_Win7系统下JAVA摄像头调用_实例代码介绍
Win7系统下JAVA摄像头调用_实例代码介绍.由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceManager.g ...
- java火山_火山代码转java源代码查看
今天我们来研究一下火山安卓的源代码,火山安卓允许我们以本地化编程(中文代码编程)的方式来撰写安卓app,那么在生成实际要安装到安卓app的时候,它是如何进行编译处理的呢.让我们今天来一起探究一下. 首 ...
- java rest 序列化_一文看懂Java序列化
一文看懂Java序列化 简介 首先我们看一下wiki上面对于序列化的解释. 序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓 ...
- java 内存分布_一图看懂JVM内存分布,永久记住!
经常在说JVM内存分布,也经常去看,但是总是在面试的时候说不清楚或者模糊,甚至有可能说错,只有真正的理解,并且在心中有一个总结构图才能记得清楚说的清楚! | JVM总览图 java内存区域主要分程序计 ...
- java菱形乱码 编码_【分享】Java开发过程中中文乱码问题总结
一.文件乱码处理 1.文件默认编码:默认使用项目的默认编码 右击文件->Properties->Resource->Text file encoding 2.JSP文件编码:由于JS ...
- java ee 导入项目_最代码网站java项目下载后遇到项目打开,导入,运行的问题QA汇总...
经常有牛牛下载最代码的代码后遇到各种关于压缩包打开,项目导入,项目运行的问题,我这边总结了很多相关的问答,博客,代码. 项目无法运行,首先确认本地配置,搞不定再求助搜索引擎,最后再私信最代码官方. 一 ...
- bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string
好程序员Java学习路线分享Java基础之string 好程序员Java培训 先来讲一下字符串 字串符分类: 不可变字符串:----String.字符串本身不能发生改变,与指向字符串的引用无关. St ...
- andorid简单计算器java源码_求大佬用java写个简单计算器的代码
[Java] 纯文本查看 复制代码package com.xing.tag; import java.awt.BorderLayout; import java.awt.Color; import j ...
最新文章
- docker 安装oracle_Windows系统下安装Docker,包你满意!
- (转)iPhone开发经典语录集锦
- Python 之 matplotlib (三)坐标轴
- B站最火数学视频3Blue1Brown是如何制作的
- linux stat函数讲解
- .net持续集成sonarqube篇之sonarqube安装与基本配置
- 输出整形变量语句_Python合集之Python变量
- 如何在本地开发环境调试微信 JS-SDK
- zzulioj 1065:统计数字字符个数
- 框架简述 带你认识 Mybatis
- 什么样的人最适合创业?
- 第二十节:Scrapy爬虫框架之使用Pipeline存储
- iOS常用的第三方类库
- smtplib python教程_Python基于smtplib实现异步发送邮件服务
- perl查看文件,提取指定信息输出到文件
- Android-蓝牙AVRCP功能实现【转】
- Android瘦身优化
- Vue中时间日期格式化
- 【OJ每日一练】1029 - 字母密码
- csdn赵四老师语录
热门文章
- SAP UI5和Angularjs事件处理机制的实现比较
- Spring 中基于 AOP 的 XML操作方式
- how I can get expand tree for unit test
- hybris impex里的多语言处理语法
- SAP UI5 that.getView().bindElement(that.Context)
- Why Opportunity list is empty
- windows系统上openssh client的离线安装
- gateway调用后台系统时选择RFC的决定逻辑
- Cloud for Customer UI checkbox控件在PC和mobile端的不同显示
- SAP CRM呼叫中心点了interact按钮后的处理逻辑