帮你理清Java中字符与字节的编码关系

获取车辆VIN等OBD信息 获取车辆如下OBD信息: VIN:Vehicle Identification Number CALID:Calibration Identifications CVN:Calibration verification number 一、SAE J1939协议 通过请求 CALIBRATION INFORMATION (DM19),获取CVN和CALID。 发送请求:18EA00F9 00 D3 00 应答:18EC0000 10 14 00 03 FF 00 D3 00 数据,BYTE1=0x10,表明 阅读详情

转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/14162087


    首先,java中的一个char是2个字节。java采用unicode,2个字节来表示一个字符,这点与C语言中不同,C语言中采用ASCII,在大多数系统中,一个char通常占1个字节,但是在0~127整数之间的字符映射,unicode向下兼容ASCII。而Java采用unicode来表示字符,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占用的字节数则各不相同。

    在 GB 2312 编码或 GBK 编码中,一个英文字母字符存储需要1个字节,一个汉字字符存储需要2个字节。 在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符存储需要2个字节,一个汉字字符储存需要3到4个字节(Unicode扩展区的一些汉字存储需要4个字节)。在UTF-32编码中,世界上任何字符的存储都需要4个字节。

   1、我的系统的默认编码方式为GBK,因此对于字符串 “你好hello”,

    如果调用length()方法返回其长度,得到的结果将为:7。该方法返回的是字符串的字符数,无论是中文字符还是英文字符,都被看做是一个字符。

    如果将其转换为byte数组,而后返回byte数组的长度,得到的结果将为:9。因为在GBK编码中,中文占2个字节,而英文字符占1个字节。

    执行如下代码,将得到如下图所示的输出:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Hel {  
  2.     public static void main(String[] args){  
  3.         String str = "你好hello";  
  4.             int byte_len = str.getBytes().length;  
  5.             int len = str.length();  
  6.             System.out.println("字节长度为:" + byte_len);  
  7.         System.out.println("字符长度为:" + len);  
  8.         System.out.println("系统默认编码方式:" + System.getProperty("file.encoding"));  
  9.        }  
  10. }  
      输出结果如下图:


    

   2、将编码方式为改为utf-8,即执行如下代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class Hel {  
  2.     public static void main(String[] args)throws Exception{  
  3.         String str = "你好hello";  
  4.             int byte_len = str.getBytes("utf-8").length;  
  5.             int len = str.length();  
  6.             System.out.println("字节长度为:" + byte_len);  
  7.         System.out.println("字符长度为:" + len);  
  8.         System.out.println("系统默认编码方式:" + System.getProperty("file.encoding"));  
  9.        }  
  10. }  

    对于字符串 “你好hello”,得到的输出结果如下:


   

     此时得到的的byte数组的长度为:11。因为在utf-8编码中,该中文字符占了3个字节,英文字符占1个字节。

    

    3、如果将编码方式改为:utf-16,输出结果如下:

    

      此时得到的的byte数组的长度为:16。因为在utf-16编码中,该中文字符占了3个字节,英文字符占2个字节。


     3、如果将编码方式改为:utf-32,输出结果如下:

     
     此时得到的的byte数组的长度为:28。因为在utf-32编码中,所有的字符均占4个字节。
【PySide6拓展】初识QChart图表 在 PySide6 中,QtCharts模块提供了一系列强大的类,用于创建和管理图表。QChart是这个模块的核心类,它可以帮助开发者轻松地实现数据的可视化。本篇文章将介绍如何使用 PySide6 的QtCharts模块,并通过一个简单的示例教你如何快速引入QChart。QChart折线图柱状图饼图区域图它能够直观地呈现数据,同时支持交互功能,如缩放、拖拽和工具提示等。通过引入QChart,我们可以轻松实现数据的可视化,提升应用的交互性和用户体验。结合其他QtCharts。 阅读详情

相关推荐

Ai数字人直播系统源码部署

虚拟形象定制,直播内容智能生成,多语言支持,智能互动,声音克隆,24 小时不间断直播,多平台直播,智能数据分析,实时情感识别,视频合成,Ai数字人直播系统源码出售,Ai数字人直播系统源码部署实现 AI 数字人 24 小时不间断直播功能是一个较为复杂的任务,涉及到多个方面,如直播流的推送、内容的持续生成、系统的稳定性保障等。以下为你提供一个简化的实现思路和示例代码,借助 Python 结合 FFmpeg 工具来模拟 24 小时不间断直播。

weixin_ggwwsscc的博客 1256

java 字符和字节的关系

问题:     Java中中英文分别占几个字节?如果数据量很大,或者存储空间不足的时候,可能需要考虑字节的占用大小,用于估计使用机器的数量。 方案:     很简单的:         1个字符=2个字节         1个字节=8位     1个英文字符占一个字节,也就是0.5个字符     1个中文字符占2-4个字节,这个需要区分编码情况,具体如下:

攀爬蜗牛-dutycode.com 1699

基于结构的虚拟筛选模型 gnina 从源码编译

所需要的软件安装包: 安装 CUDA 装的时候看着点,第二个要你装驱动的选择,回答N,不装。 sudo sh cuda_10.0.130_410.48_linux.run sudo vim ~/.bashrc 在 ~/.bashrc 文件最后加上 export PATH=/usr/bin:/usr/local/cuda-10.0/bin${PATH} export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH} source ~

周迪新的博客 3188

Java一个中文字符占几个字节

Java采用UTF-8编码方式时,一个中文字符会占3个字节。

m0_56419249的博客 3741

别让运放自激振荡!手把手教你用波特图分析反相放大电路的稳定性(附LTspice仿真)

本文详细解析了运算放大器在反相放大电路中的稳定性问题,通过波特图分析和LTspice仿真,揭示了自激振荡的成因及解决方案。文章从故障现象识别到数学工具应用,再到实战仿真和工程优化,提供了一套完整的稳定性分析工具链,帮助工程师有效避免运放自激振荡问题。

weixin_31682031的博客 303

Shell编程规范及变量

文章目录一.Shell脚本1.1Shell概述1.2Shell脚本 一.Shell脚本 1.1Shell概述 Shell是Linux系统中开机自动加载的一个特殊程序,它将用户输入的指令,转换成Linux内核可以识别的语言,从而让内核执行调用硬件。 Bash是Linux系统中默认使用shell的程序,它位于/bin/bash。 1.2Shell脚本 将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的 ...

夏颜的博客 3676

Java中的char为什么占两个字节?能表示所有的字符吗?

要回答标题中的两个问题,先看下面的内容。 Unicode是一种字符集规范,而且还在不断发展之中。我们常说的UTF-8,UTF-16编码是其不同的两种实现。请注意,字符集和编码不是一回事。Unicode规范好比就是定义了每个字符对应一个数字,至于如何把这个数字存放在计算机中,那是另一回事。Unicode收录的每个字符对应一个数字,称作码点(code point),通常用“U+”后面跟着一个十六进制数...

LZCDTU的博客 4633

ISP工程师实战笔记:5种Demosaic算法优缺点对比(含Hamilton/DFPD代码片段)

本文从ISP工程师实战角度,深入对比了五种经典Demosaic算法的优缺点。文章详细剖析了双线性插值、Hamilton、DFPD、DLMMSE和GBTF等算法的核心思想、实现差异与性能表现,并提供了Hamilton和DFPD算法的关键代码片段。重点探讨了在图像信号处理流水线中,如何根据画质、计算复杂度和功耗等工程约束进行算法选型与权衡。

weixin_42527589的博客 248

Java中字符与字节常识

计算机中存储的最小存储单位是字节,1字节等于8个二进制位, 但是字符在不同的编码规则中对应不同的字节,二者的关系需要用到编码和字符集的相关知识

yhb500234的博客 3219

视频压缩的工作原理

当你正在观看你最喜欢的节目,出现缓冲的时候,这是什么原因?当 Wi-Fi 带宽不足以下载传输视频流所需的数据时,就会发生缓冲。也有可能是视频网站发布了未压缩版本的视频文件,因此视频文件太大而无法流畅地流式传输。在高清模式下,图像分辨率为1080x1920像素,如果我们想象一个视频由许多这些图像组成,称为帧,那么 Wi-Fi 连接必须多快才能播放24帧/秒?答案是超1000兆,没错。由于每一帧都是48兆比特的数据,它实际上需要48×24每秒兆比特 (Mbps) 以观看视频24帧/秒。

学以致用 知行合一 1280

YOLOv5改进 | 低照度检测 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。

Snu77的博客 2222

字节、字符、编码

在Socket网络编程开发时,需要解析消息数据。其中涉及到了字节、字符、编码的知识,在网上查了一些资料,记录下来以便查阅。

玄灵斩仙剑的博客 429

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

揭秘Java中char与ASCII的字节之谜!!!

本文深入探讨了Java中char类型与ASCII编码的字节特性及其关系。Java的char类型固定占用2个字节,支持Unicode编码,能够覆盖全球字符;而ASCII编码仅占用1个字节,主要用于英文字符处理。文章通过对比表、流程图、时序图和思维导图,详细解析了它们的工作机制和转换过程,并解答了常见问题。理解这些差异有助于在开发中更合理地选择数据类型和编码方式,提升代码效率。

小丁的博客 1212

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Java】一文带你理清Java中输入输出流、文件读写、Reader/Writer的关系

在Java编程中,输入输出流以及文件读写是基础而重要的概念,对于初学者来说,理解它们的关系有助于更好地进行文件操作。本文将深入解析Java中输入输出流、文件读写、Reader/Writer之间的关系,为你提供一个清晰的认识。

JeredYe的博客 1092

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

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

由char和byte的关系引申出去——总结一下java中的字符编码相关知识

​  文着重介绍了计算机字符编码的相关知识,同时也总结了java中有关字符编码的一些内容,希望能对你有所帮助。

Legolas_PRC的博客 248

理清字符集和字符编码关系

  什么是字符集     字符(Character)是文字与符号的总称,包括文字、图形符号、数学符号等。 一组抽象字符的集合就是字符         集(Charset)。     字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。     常见的字符集包括ASCII字符集(由控制字符和图形字符组成)、GB2312...

小滔哥的博客 233

从文件到屏幕:Python/java 字符编码、解码、文本处理的底层逻辑解析

在python开发中,我们频繁使用 open() 读取文件、用 [] 索引字符串、通过 print() 输出内容,但很少深究这些操作背后的编码转换、内存存储与渲染机制。这篇博客结合 Python ,从编码本质、内存存储、文件操作到终端渲染,拆解文本处理的完整链路,主要是理清 Unicode、UTF-8 与字节流的关系。码点是核心:内存中字符串的本质是 Unicode 码点集合,Python 封装了底层变长存储,实现高效索引。

勇往直前的博客 1068

一文理清 Java IO 流与IO网络模型:从基础到实战

IO流(分类?IO网络模型?) 字节流 字节输入流:FileInputStream 字节输出流:FileOutputStream write()、read() 字符流 字符输入流FileReader 字符输出流:FileWriter write()、read() 缓冲字节流 字节缓冲输入流:BufferedInputStream 字节缓冲输出流:Buff

JIGUANGDI 972

URL 编码与 Unicode 编码详解

在网络通信和程序开发中,编码问题是最容易踩坑也最容易被忽视的基础概念之一。很多开发者会把 URL 编码和 Unicode 编码混为一谈,或是在遇到乱码、参数解析失败时找不到根本原因。本文将从底层原理出发,系统梳理两种编码的定义、规则、应用场景以及二者的本质区别,帮助你彻底理清编码逻辑。

weixin_41943766的博客 542

Java IO流基础全面详解:字节流、字符流

IO是Input(输入)和Output(输出)的缩写,Java IO流是一套用于实现程序与外部设备之间数据传输的API体系。外部设备主要包含本地硬盘文件、内存、网络端口、控制台等,IO流的核心作用,就是搭建程序与这些外部设备之间的数据传输通道,完成数据的读取和写入操作。掌握Java IO流,核心只需把握三个核心要点:根据文件类型选择字节流或字符流,追求读写性能优先使用缓冲流,编码不一致出现乱码使用转换流。

2501_93275026的博客 429

面试之Java String 编码相关

  另有一篇我的字符编码本质入门的文章见这里:编程入门之字符编码与乱码 - 锅叔 - 博客园   实话说,作为一个多年Java老年程序员,直到近来,在没有决心花时间搞清楚Java String的编码相关问题之前, 自己也都还是似懂非懂,一脸懵逼的。设想如果在面试中,有同学能够条理清晰的回答下面的问题,那必是非常了得之人,论智慧武功应该均在本人之上:-)。   问:请预测下面程序的输出,并解释原因。printHexBinary方法为16进制打印Byte 1 String str = "中"; 2

锅叔的博客 371

gbk编码在线转换_码学院 | 寻踪:JAVA编码格式

各位华软君好,我是小兔子乖乖,很喜欢寻找事情的真相,很高兴可以和大家探讨技术问题,这次我们来探究JAVA编码格式的小秘密吧。小兔子乖乖:先来看下面一个例子。// 例子1int i = 30000;char c = (char)i;System.out.println(i);System.out.println(c);结果如下:30000田A君:啥玩意儿,怎么30000会变成了一个田字?B...

weixin_39969448的博客 1103

utf8编码问题深究

之前,遇到汉字的utf8编码问题,掌握了处理方法,没做理论方面的深究。如今又遇到了缅甸语的编码问题,现在理清一下理论的问题。 1. utf8是变长编码,也就是一个字符(汉字或是其他文字)所占的字节数不同。 这个主要影响C++里面把一个句子分割成一串字符序列时,substring的参数,也就是一次取几个字节出来,如果字节长度没确定对,会把正确的字切开,导致乱码问题。 字节长度变化范

zhangjcsd的专栏 874

揭秘Recaf:Java字节码分析与编辑的终极利器

还在为Java反编译工具功能单一而苦恼吗?Recaf作为一款现代化的Java字节码分析平台,不仅提供强大的反编译能力,更集成了完整的资源管理、代码编辑和项目分析功能,让Java逆向工程变得前所未有的简单高效。 ## 🔍 为什么选择Recaf? 在众多Java反编译工具中,Recaf凭借其独特的设计理念脱颖而出。它不仅仅是一个反编译器,更是一个完整的Java字节码工作台,支持从基础代码查看到复

gitblog_00838的博客 1020
上一篇: Java TCP/IP Socket编程
下一篇: JAVA基础知识点(自己总结的)
rabbit_in_android
博客等级 码龄11年 45粉丝 39原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值