在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输入输出中的编码和解码相关推荐

  1. 如何用java输出方格_第三章 Java类基础知识作业之(输出5*5数字方格,打印星塔)...

    public class Main { public static void main(String[] args) { // main函数的输入参数:Run as -> Run Configu ...

  2. java 摄像头 win7_Win7系统下JAVA摄像头调用_实例代码介绍

    Win7系统下JAVA摄像头调用_实例代码介绍.由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceManager.g ...

  3. java火山_火山代码转java源代码查看

    今天我们来研究一下火山安卓的源代码,火山安卓允许我们以本地化编程(中文代码编程)的方式来撰写安卓app,那么在生成实际要安装到安卓app的时候,它是如何进行编译处理的呢.让我们今天来一起探究一下. 首 ...

  4. java rest 序列化_一文看懂Java序列化

    一文看懂Java序列化 简介 首先我们看一下wiki上面对于序列化的解释. 序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓 ...

  5. java 内存分布_一图看懂JVM内存分布,永久记住!

    经常在说JVM内存分布,也经常去看,但是总是在面试的时候说不清楚或者模糊,甚至有可能说错,只有真正的理解,并且在心中有一个总结构图才能记得清楚说的清楚! | JVM总览图 java内存区域主要分程序计 ...

  6. java菱形乱码 编码_【分享】Java开发过程中中文乱码问题总结

    一.文件乱码处理 1.文件默认编码:默认使用项目的默认编码 右击文件->Properties->Resource->Text file encoding 2.JSP文件编码:由于JS ...

  7. java ee 导入项目_最代码网站java项目下载后遇到项目打开,导入,运行的问题QA汇总...

    经常有牛牛下载最代码的代码后遇到各种关于压缩包打开,项目导入,项目运行的问题,我这边总结了很多相关的问答,博客,代码. 项目无法运行,首先确认本地配置,搞不定再求助搜索引擎,最后再私信最代码官方. 一 ...

  8. bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string

    好程序员Java学习路线分享Java基础之string 好程序员Java培训 先来讲一下字符串 字串符分类: 不可变字符串:----String.字符串本身不能发生改变,与指向字符串的引用无关. St ...

  9. andorid简单计算器java源码_求大佬用java写个简单计算器的代码

    [Java] 纯文本查看 复制代码package com.xing.tag; import java.awt.BorderLayout; import java.awt.Color; import j ...

最新文章

  1. docker 安装oracle_Windows系统下安装Docker,包你满意!
  2. (转)iPhone开发经典语录集锦
  3. Python 之 matplotlib (三)坐标轴
  4. B站最火数学视频3Blue1Brown是如何制作的
  5. linux stat函数讲解
  6. .net持续集成sonarqube篇之sonarqube安装与基本配置
  7. 输出整形变量语句_Python合集之Python变量
  8. 如何在本地开发环境调试微信 JS-SDK
  9. zzulioj 1065:统计数字字符个数
  10. 框架简述 带你认识 Mybatis
  11. 什么样的人最适合创业?
  12. 第二十节:Scrapy爬虫框架之使用Pipeline存储
  13. iOS常用的第三方类库
  14. smtplib python教程_Python基于smtplib实现异步发送邮件服务
  15. perl查看文件,提取指定信息输出到文件
  16. Android-蓝牙AVRCP功能实现【转】
  17. Android瘦身优化
  18. Vue中时间日期格式化
  19. 【OJ每日一练】1029 - 字母密码
  20. csdn赵四老师语录

热门文章

  1. SAP UI5和Angularjs事件处理机制的实现比较
  2. Spring 中基于 AOP 的 XML操作方式
  3. how I can get expand tree for unit test
  4. hybris impex里的多语言处理语法
  5. SAP UI5 that.getView().bindElement(that.Context)
  6. Why Opportunity list is empty
  7. windows系统上openssh client的离线安装
  8. gateway调用后台系统时选择RFC的决定逻辑
  9. Cloud for Customer UI checkbox控件在PC和mobile端的不同显示
  10. SAP CRM呼叫中心点了interact按钮后的处理逻辑