【Java文件流】简单明了的“编码”教程

Java操作pdf文件与Base64编码相互转换与文件流操作 1.第一步,引入bc包的安装依赖。 在pom.xml中引入。 <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on --> <dependency> <groupId>org.bouncycastle</groupId> <artif... 阅读详情

很多人说,编码与解码太迷了,根本不知道它是在编码什么,在解码什么。或许这时,你应该尝试一下我这篇文章。


从源头来说,还是因为计算机和人的根本区别,计算机看的是二进制机器码,而我们只能看懂特殊字符(英文,中文),把特殊字符变成二进制码的过程就成为 编码。又由于地球上存在很多种类的语言,每种语言的每个元素都是一个字符(例如中文“你”,“好”),把中文字符变成二进制机器码,这个过程就称为 有一定格式的编码,或者叫 编码方式。

  • 编码: 把看得懂的字符变成看不懂码值这个过程我们称作为编码。
  • 解码: 把码值查找对应的字符,我们把这个过程称作为解码。
  • 注意: 以后编码与解码一般我们都使用统一的码表(码表,即编码方式)。否则非常容易出乱码。

码表

欧美地区常用编码:

  • ASCII:美国标准信息交换码。用一个字节表示。
  • ISO8859-1:拉丁码表。欧洲码表,用一个字节的8位表示。又称Latin-1(拉丁编码)或“西欧语言”。ASCII码是包含的仅仅是英文字母,并且没有完全占满256个编码位置,所以它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入192个字母及符号,以供使用变音符号的拉丁字母语言使用。从而支持德文,法文等。因而它依然是一个单字节编码,只是比ASCII更全面。

中文简体编码:

  • GB2312:英文占一个字节, 中文占两个字节。中国的中文编码表。
  • GBK:中国的中文编码表升级,融合了更多的中文文字符号。

中文繁体编码:

  • Big 5:每个字使用 2 bytes

国际上通用的编码:

  • Unicode:又称宽字节编码,国际标准码,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicode。
  • UTF-8:自动区分中英文,英文占一个字节,中文占三个字节。
  • UTF-16: 不管英文中文都是占两个字节。

Java编码

编码功能:字符串 --> 字节数组

  • String类的getBytes() 方法进行编码,将字符串,转为对映的二进制,并且这个方法可以指定编码表。如果没有指定码表,该方法会使用操作系统默认码表。
  • 注意:中国大陆的Windows系统上默认的编码一般为GBK。在Java程序中可以使用System.getProperty(“file.encoding”)方式得到当前的默认编码。
//编码用字节数组;解码用String类;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Main {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String value = System.getProperty("file.encoding");
		System.out.println("系统默认的编码为 " + value);
				
		String str = "中国";
		byte[] buf = str.getBytes("utf-8");// 平台默认的编码表是gbk编码表,这里指定使用utf-8
		System.out.println("数组的元素:"+Arrays.toString(buf)); //输出各个元素的编码码号
				
		str = new String(buf,"utf-8");  //什么编码方式,就用什么解码方式
		System.out.println("utf-8解码后的字符串:"+ str); //编码与解码一般我们都使用统一的码表才不会出现乱码;
		str = new String(buf,"unicode");
		System.out.println("unicode解码:"+ str);  //使用unicode去解码,输出乱码;
	}
}
/* 输出:
	系统默认的编码为 GBK
	数组的元素:[-28, -72, -83, -27, -101, -67]
	utf-8解码后的字符串:中国
	unicode解码:?鮽
*/

Java解码

解码功能:字节数组 --> 字符串

  • String类的构造函数完成。
  • String(byte[] bytes) 使用系统默认码表
  • String(byte[],charset) 指定码表
  • 注意:我们使用什么字符集(码表)进行编码,就应该使用什么字符集进行解码,否则很有可能出现乱码(兼容字符集不会)。

  存文件时可以使用各种编码,但是解码的时候要对应的采用相同的解码方式。我们的字符流自动的做了编码和解码的工作,写一个中文,字符流进行了编码,存到了计算机中读到了一个字符,字符流进行了解码,我们可以看到字符。因为文件存的都是二进制。但是拷贝图片时,是纯二进制,不是有意义的字符,所以码表无法转换。

编码兼容

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Main {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String str = "a中国"; 
		byte[] buf = str.getBytes("unicode");  //编码与解码的时候指定 的码表是unicode实际上就是用了utf-16.
		System.out.println("数组的内容:"+ Arrays.toString(buf));// -2, -1, 0, 97, 78, 45, 86, -3 :unicode编码使得开头有“-2,-1”,直接忽略其即可;
		
		str = new String(buf,"unicode");
		System.out.println("Unicode解码:"+str);  //正常显示;
		
		str = new String(buf,"utf-8");
		System.out.println("utf-8解码:"+str); //输出乱码;
	}
}
/* 输出:
	数组的内容:[-2, -1, 0, 97, 78, 45, 86, -3]
	Unicode解码:a中国
	utf-8解码:??
*/

乱码还原:

乱码还原
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Main {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String str = "大家好";
		byte[] buf = str.getBytes(); //使用gbk进行编码
		System.out.println("字节数组:"+ Arrays.toString(buf));  // -76, -13, -68, -46, -70, -61

		str = new String(buf,"iso8859-1"); //使用iso8859-1解码
		System.out.println(str); //出现乱码
		
		// 问题:出现乱码之后都可以被还原吗? ——可以,解决方案:
		byte[] buf2 = str.getBytes("iso8859-1");
		str = new String(buf2,"gbk"); 
		System.out.println(str);
	}
}
如何使用Java代码获取文件、文件流或字符串的编码方式.zip 本工程用于研究如何使用Java代码获取文件、文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.youkuaiyun.com/gaohuanjie/article/details/43735891 立即下载

相关推荐

java 流编码问题

NULL 博文链接:https://mingyang2013.iteye.com/blog/1673784

java文件流编码_Java自动获取文件和文件流编码

在读取文件时,如果不清楚文件编码或者在不同的编码环境拷贝文件,这时中文数据很可能会出现乱码,参考了博客:http://blog.youkuaiyun.com/servermanage/article/details/8595676,有了如下的代码:/*** 检测文件的编码和文本流的编码* 参考: http://blog.youkuaiyun.com/servermanage/article/details/8595676...

weixin_29331115的博客 369

Multisim14安装失败?手把手教你彻底清理残留文件(附专用卸载工具)

本文针对Multisim14安装失败问题,提供了一套从根源解决的完整方案。文章详细分析了安装失败的三大元凶——文件残留、注册表残留和隐藏组件,并手把手指导用户使用专用卸载工具进行标准化清理,再结合手动深度清理文件系统和注册表,最终实现彻底卸载和完美重装,有效解决Multisim14安装问题。

weixin_29179311的博客 317

java文件流——文件编码

package com.ioliu; public class Demo1 { public static void main(String[] args) throws Exception{ String s="慕课abc"; byte[] bytes1=s.getBytes();//转换成字节序列用的是项目默认的编码 //GBK中文占两个字节,英文占一个字节 for(by

Lizhifun 914

Rope DFM一键整合包AI脸部替换教程:使用DeepFaceLab模型实现专业级视频和直播脸部替换

在AI脸部替换工具中,Rope凭借其出色的自动遮罩处理拔得头筹,结合DFM模型中的DFL XSeg遮罩处理,效果更是提升了一个台阶。因为在训练模型时,它已经通过大量的侧脸图片进行训练,达到了单张图片无法企及的效果。然而,想要通过DeepFaceLab获得专业级的效果,不仅难度大,时间成本也相当高,训练模型也是个不小的挑战。举个简单的例子,使用图片脸部替换时,如果佩戴眼镜,脸部替换后的可能会显得很假。另外,在视频中,比如歌手演唱时,话筒遮挡住脸部,这种场景也可以通过遮罩训练后的模型来处理,呈现出更逼真的效果。

m0_72580657的博客 8160

DDR4协议规范之(一)DDR4结构和寻址

DDR4 SDRAM结构和寻址DDR4 SDRAM的封装和寻址新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 DDR4 SDRAM的封装和寻址 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习

YJFeiii的博客 3万+

Java-IO流文件操作,编码转换

分为四大类:字节读取,字节写入,字符读取,字符写入,字节适合任意文件,字符只适合纯文本文件。

qq_34577961的博客 2251

AIGC实战:用ComfyUI和Lora微调打造专属原神角色(含完整工作流)

本文详细介绍了如何利用ComfyUI和Lora微调技术打造专属原神风格角色,涵盖从环境配置、数据集准备到工作流构建和Lora训练的全过程。通过模块化节点设计和高级控制技术,创作者可实现高度个性化的AIGC艺术创作,提升二次元角色生成的效率与质量。

weixin_29185199的博客 348

java文件编码

ASCII编码,8bit(一个字节),能表示的最大的整数就是255(2^8-1=255),由于ASCII 的编码最高位总是 0,所以只定义了128 个字符,用0 - 127用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。而且最广泛的就是常用的UTF-8。UTF-8,Unicode Transformation Format,可变长度编码,通常使用1~4字节为每个字符编码,兼容ASCII编码,这是一种Unicode的一种转换格式。

weixin_36705589的博客 1543

LD14激光雷达与STM32F103C8T6(标准库)获取雷达360度数据(1)

LD14激光雷达与STM32F103C8T6(标准库)获取雷达360度数据(1)

qq_54206194的博客 3897

2022年TI杯模拟电⼦系统设计专题邀请赛——李萨如图形演示装置

本次装置主要是对输入的正弦信号进行频率变换,并将原输入正弦信号作为 X 轴信号、变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。采用 EK-TM4C123GXL 板卡作为主控;频率变换采用“锁向环+计数器”实现 1-5 倍频的频率变换控制;李萨如图形采用两个 AD通道采集原输入的正弦信号作为 X 轴信号和频率变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。

qq_45890466的博客 7767

java文件流编码_Java IO流 文件的编码实例代码

•文件的编码package cn.test;import java.io.UnsupportedEncodingException;public class Demo15 {public static void main(String[] args) throws UnsupportedEncodingException {String str = "你好ABC123";byte[] b1 = s...

weixin_42513632的博客 252

【异常】OpenAI提示内容有误 Invalid prompt: your prompt was flagged as potentially violating our usage policy.

用户需优先调整提示内容,确保符合OpenAI的使用政策。若问题持续,建议结合请求ID和具体代码示例联系官方支持。同时,可参考腾讯云、Microsoft Q&A等平台提供的错误处理实践(如重试机制、日志记录)优化代码健壮性。

奶爸的编程之路,也就一周冷个三天 2068

java读取文件及文件流

 java读取文件或是文件流的代码,涵盖了读取jar文件中的文件流,网络文件流等,有些读取方式为了防止编码转换带来的问题,采取了动态byte[]的方式读取,源码如下 :import java.io.BufferedInputStream;import java.io.File;import java.io.BufferedOutputStream;import java.io.IOExce

XiaoYi's BLOG 1万+

试读源码在这里下载

试读文章的源码在这里下载。源码不做任何修改,重点重点重点:为了代码运行不报错,安装matlab 版本为 2021 及以上版本。matlab安装教程大家可以参考这个教程:手把手教你安装matlab软件。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4301

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文件流转换为base64码 和 base64码转换为文件流

文件流转换为base64码 和 base64码转换为文件流

qq_43685588的博客 4053

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java 自动判断文件编码_Java自动获取文件和文件流编码

在读取文件时,如果不清楚文件编码或者在不同的编码环境拷贝文件,这时中文数据很可能会出现乱码,参考了博客:http://blog.youkuaiyun.com/servermanage/article/details/8595676,有了如下的代码:​/*** 检测文件的编码和文本流的编码* 参考: http://blog.youkuaiyun.com/servermanage/article/details/859567...

weixin_32412379的博客 583

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java流编程实例之二--文件流

3. 文件流3.1 如何选择文件流的类文件流应该是Java流中使用最普遍、最广泛的流了。文件流分为两组,一组是操作字节的FileInputStream和FileOutputStream,另一组是操作字符的FileReader和FileWriter,事实上,我们还经常用到FileReader和FileWriter的父类InputStreamReader和OutputStreamWriter,原因后

LogicTeamLeader的专栏 1675

Java文件流使用总结

前言 其实对于刚学Java的人来说,对文件流的概念总是很模糊,我记得我当时就是懵懵懂懂,而且文件流操作伴随着一堆try-catch代码,乱七八糟的,看的头疼。今天来总结一下文件流相关概念吧 简述 Java读写文件流分为两大类:字节流、字符流 字节流:可以处理所有类型的数据,包括音频视频图片,主要操作byte类型数据 字符流:只能处理文本数据 // 输入流只能读 // 输出流只...

pengbo6665631的博客 2271

使用Feign远程调用获取文件流并转换为Base64编码

首先,我们需要定义一个Feign客户端接口,用于从远程服务获取文件流。注意,这里我们使用了Resource作为返回类型,它是Spring框架中用于抽象资源(如文件、URL等)的接口。Feign客户端会自动处理响应的转换,将二进制流封装为Resource对象。

qq_50412485的博客 1087

java中pdf写成base64文件流,Java操作pdf文件与Base64编码相互转换与文件流操作

1.第一步,引入bc包的安装依赖。在pom.xml中引入。org.bouncycastlebcprov-jdk15on1.60引入后reimport一下项目。2.pdf文件转换成Base64./*** @Description:* @param:* @return:* @author: TateBrown* @Date: 2018/7/25*/@ApiOperation("根据docid返回pdf...

weixin_36268722的博客 6314

java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...

标签:今天通过网络资源研究了一下如何使用Java代码获取文件、文件流或字符串的编码方式,现将代码与大家分享:package com.ghj.packageoftool;import info.monitorenter.cpdetector.io.ASCIIDetector;import info.monitorenter.cpdetector.io.ByteOrderMarkDetector;im...

weixin_39571179的博客 578

Java自动获取文件和文件流编码

在读取文件时,如果不清楚文件编码或者在不同的编码环境拷贝文件,这时中文数据很可能会出现乱码,参考了博客:http://blog.youkuaiyun.com/servermanage/article/details/8595676,有了如下的代码: /** * 检测文件的编码和文本流的编码 * 参考: http://blog.youkuaiyun.com/servermanage/article/details/8

lcj_star的专栏 4682

java IO流和文件流

I/O 这里的I和O指的是输入与输出- 输入:Input 用来读取数据的- 输出:Output 用来写出数据的。

m0_58842208的博客 949
上一篇: 【Java文件流】为什么要诞生“字符流”,字节流不是更胜任二进制数据的处理吗?
下一篇: 【Java文件流】你的“转换流、对象流、打印流、Properites”学习资料
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值