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

文档多模态识别工具对比:MinerU、PaddleOCR、Marker 本文对比了三款文档多模态识别工具:MinerU、PaddleOCR和Marker。MinerU专注于中文文档的端到端解析,支持复杂元素提取和结构化输出,适合中文论文和教材解析。PaddleOCR是通用OCR工具包,支持多语言和全流程任务,适用于发票、车牌等图像OCR。Marker则注重多语言支持和轻量化部署,适合英文论文和技术文档的快速转换。三者在核心技术、中文优化、表格处理、输出格式、部署复杂度和适用语言等方面各有优劣。选型建议根据具体需求:MinerU适合高精度中文解析,PaddleOCR适合定制化OC 阅读详情

转载请注明出处: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个字节。
C#程序突然崩溃怎么办?5分钟学会分析Dump文件(Visual Studio 2022实战) 本文详细介绍了在C#程序崩溃或无响应时,如何捕获并分析Dump文件以快速定位问题。通过Visual Studio 2022实战演示,重点讲解了配置符号服务器、解读调用堆栈与内存状态,以及针对CPU飙高、内存泄漏等典型场景的分析方法,帮助开发者高效进行故障诊断。 阅读详情

相关推荐

PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-卡尔曼滤波设置+导航解算

文章目录test_SINS_GPS_153源码poserrsetkfinitgabiaskfupdate流程 test_SINS_GPS_153源码 poserrset function poserr = poserrset(dpos0, dlon, dhgt) % position errors dpos=[dlat;dlon;dhgt] setting. % % Prototype: poserr = poserrset(dpos0) % Input: dpos0=[dlat; dlon; dhgt],

十八与她的博客 2161

java 字符和字节的关系

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

攀爬蜗牛-dutycode.com 1699

别再死记硬背Payload了!深入理解Flask/Jinja2 SSTI的Python对象继承链与魔术方法

本文深入解析Flask/Jinja2 SSTI漏洞的底层原理,从Python对象模型出发,详细讲解如何通过魔术方法链实现RCE。文章揭示了Python对象继承链与魔术方法的精妙设计,提供了防御与绕过SSTI漏洞的实用技巧,帮助开发者深入理解漏洞本质并采取有效防护措施。

weixin_42525738的博客 356

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

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

m0_56419249的博客 3741

计组实验4 控制冒险与分支预测

目录前言实验内容背景知识分支预测技术⭐阻塞周期计算方法不开启 BTB开启 BTBpart 1 矩阵乘法与优化未开启 BTB 的分析开启 BTB 的分析part 2 设计代码使 BTB 无效part 3 循环展开优化矩阵乘法未开启 BTB开启 BTB结束语结论 前言 上一篇博客:计组实验3 mips冒险之流水线冒险 摸了半个月了。。。咕咕咕 今天来写计组实验 4 这个实验非常简单,就是有点难。 这个实验比较容易算错,或者是被模拟器出人意料的结果搞的神神叨叨的,所以今天来记录并且详细分析该实验。 注:请务必阅

AKGWSB 's blog 5668

SBP依赖计算中的蝴蝶效应:一个Prefab修改如何触发全量重建?

本文深入探讨了Unity中SBP(Scriptable Build Pipeline)依赖计算的蝴蝶效应,解析了Prefab修改如何触发全量重建的机制。通过分析Asset与Object的层级关系、依赖计算的三种维度及CacheEntry系统,揭示了全量重建的根本原因,并提供了依赖可视化工具开发、优化策略与最佳实践,帮助开发者提升构建效率。

weixin_29015051的博客 444

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

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

LZCDTU的博客 4633

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3193

Java中字符与字节常识

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

yhb500234的博客 3219

成分数据的闭合效应对地球化学数据的影响及其解决方案

封闭效应 (Closure Effect),也称为常数和效应 (Constant Sum Effect),是地球化学数据分析中一个需要特别注意的统计现象。它的产生是由于我们通常使用成分数据 (Compositional Data)百分比 (%)百万分率 (ppm)由于这些数据表示的是各组分占总体的比例,它们的总和必然是一个常数 (例如 100% 或 1,000,000 ppm)。这意味着每个元素的含量不是独立的,而是与其他元素的含量相互制约。改变其中一个元素的含量必然会影响其他元素的相对比例。

qq_59349063的博客 1538

整流桥选型参数,结构原理,工艺与注意问题总结

整流桥(Rectifier Bridge)是一种电子元件,它的主要作用是将交流电(AC)转换为直流电(DC)。这种转换在许多电子设备中都是必要的,因为大多数电子元件和电路都需要直流电源来工作。本文对整流桥的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 2185

字节、字符、编码

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

玄灵斩仙剑的博客 429

【机器学习与数据挖掘实战 | 医疗】案例18:基于Apriori算法的中医证型关联规则分析

本案例针对三阴乳腺癌患者,经问卷调查收集数据并筛选处理形成原数据,经清洗、特征选择与变换后,构建Apriori模型,基于业务理解与建模结果,分析患者症状与中医证型关联,并据症状给出建议 。

Morse_Chen的博客 1380

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

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

小丁的博客 1212

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

JeredYe的博客 1092

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

Legolas_PRC的博客 248

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

  什么是字符集     字符(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、付费专栏及课程。

余额充值