char 不是 Java 中的 2 字节(16 位)吗? 为什么用 UTF-8 编码写入时,一个中文要占 3 个字节?

char 不是 Java 中的 2 字节(16 位)吗?
为什么用 UTF-8 编码写入时,一个中文要占 3 个字节?


✅ 一、Java 中的 char 是什么?

  • Java 的 char 是一个 固定大小的 2 字节(16 位)类型,表示一个 UTF-16 编码单元
  • 它的范围是 0 ~ 65535,能直接表示所有的 基本多语言平面字符(BMP),即 U+0000 ~ U+FFFF。

所以你在内存中看到的:

char[] chars = {'H', 'i', '你', '好'};

这个 char[] 在内存中确实占了 8 字节(4 × 2 字节)


✅ 二、UTF-8 是一种“变长”的字符编码

  • UTF-8 是一种用于 文件/网络传输时的字节编码格式
  • 它不是固定 2 字节,而是变长编码
字符范围(Unicode)编码长度(UTF-8)
U+0000 ~ U+007F1 字节(ASCII)
U+0080 ~ U+07FF2 字节
U+0800 ~ U+FFFF3 字节
U+10000 ~ U+10FFFF4 字节(需要两个 char 表示)

✅ 三、中文字符“你好”占多少字节?

中文字符“你”和“好”的 Unicode 编码是:

字符UnicodeUTF-8 编码(十六进制)UTF-8 字节数
U+4F60E4 BD A03 字节
U+597DE5 A5 BD3 字节

✅ 四、为什么 UTF-8 编码比 Java 内存中的 char 多?

编码位置数据内容编码方式字节数
Java 内存char[]UTF-16,每个 char 占 2 字节8 字节(H i 你 好)
写入文件Writer → UTF-8 编码ASCII 占 1 字节,中文占 3 字节总共 8 字节(1+1+3+3)

你写入时用了 Writer + UTF-8 编码,这是“把 UTF-16 字符 转换为 UTF-8 字节流”的过程。


✅ 五、简单类比图示:

Java char[] (UTF-16):   [H][i][你][好]
字节数(内存中):          2  2   2   2  = 8字节UTF-8 编码写入文件:      H→1字节  i→1字节  你→3字节  好→3字节 = 8字节

你看到的文件占 8 字节,刚好是:

  • H(1)
  • i(1)
  • 你(3)
  • 好(3)

✅ 结论总结

问题回答
Java 的 char 是 2 字节吗?✅ 是的,UTF-16 编码单元
UTF-8 中一个中文是几字节?通常是 3 字节(U+0800 ~ U+FFFF 范围)
为什么 UTF-8 比 char 更长?因为 UTF-8 是变长编码,针对不同字符长度不同
最终文件内容是字节编码还是字符?是 UTF-8 编码的 字节数据,不是 Java 的 char 直接写入的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89826.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Elasticsearch】检索排序 分页

检索排序 & 分页 1.测试数据准备2.排序功能2.1 简单字段排序2.2 多字段排序2.3 日期排序 3.分页功能3.1 基础分页3.2 深度分页(不推荐大数据量使用)3.3 使用 search_after 进行高效分页 4.综合示例:高亮排序分页5.实践建议 1.测试数据准备…

Delta、Jackknife、Bootstrap

用班级平均身高的案例,展示 ​Delta、Jackknife、Bootstrap​ 的完整计算过程。 ​0. 数据准备​ ​原始数据(4个学生的身高)​​: 真实均值(目标统计量)​​: ​1. Delta 方法(公式…

企业智脑技术架构设计:紧贴企业场景规划面向未来的发展趋势与实现路径

摘要 本文深入探讨了企业智脑技术架构的设计理念与发展趋势,分析了当前企业智能化转型的技术需求与挑战,提出了一个面向未来的企业智脑技术架构设计方案。文章从底层技术支撑、核心能力构建、应用场景适配、安全合规保障以及未来发展路径五个维度展开论…

新手向:Python方向讲解

从NASA火星任务到TikTok推荐算法,从自动化脚本到量子计算,Python用import antigravity重新定义了编程边界 一、设计哲学:优雅明确的编程禅学 Python之禅(import this): 优美胜于丑陋(Beautifu…

Chrome谷歌浏览器插件ModHeader,修改请求头,开发神器

文章目录一、介绍与下载二、使用一、介绍与下载 ModHeader顾名思义就是让我们可以自定义HTTP请求头或者是重写响应头,包括新增请求头/响应头或者覆盖Chrome浏览器设置的请求头的默认值,同时还可以根据URL Pattern来只对特定网站生效。 有条件的同学可以…

SEW:无监督预训练在语音识别中的性能-效率权衡

摘要 本文研究了自动语音识别(ASR)中预训练模型的性能-效率权衡问题。我们聚焦于 wav2vec 2.0,并形式化了多种影响模型性能和效率的架构设计。基于所有观察结果,我们提出了 SEW(Squeezed and Efficient Wav2vec&#…

linux系统部署express+vue项目

一、准备阶段: 1、安装linux上所需要的环境:npm nodejs nginx pm2 //安装 npm(Node 包管理器) sudo apt install npm//判断是否安装成功 npm -v//安装 Node.js(可以根据需要选择版本) sudo apt inst…

PixiJS教程(004):点击事件交互

1.6 事件交互实现要求:点击宝剑,修改宝剑的颜色。1️⃣实现代码: // 为精灵添加交互事件 sprite.interactive true; sprite.on(click, () > {// 点击精灵时,改变精灵的颜色sprite.tint Math.random() * 0xFFFFFF; });说明&am…

创客匠人助力家庭教育IP破局:从0到1打造创始人个人品牌全攻略

一、IP定位:细分赛道的精准锚定与用户画像构建 在家庭教育8000亿市场规模的竞争中,创始人IP的差异化定位成为破局关键。创客匠人通过“标签化定位”工具,帮助教育者锁定垂直领域,如亲子沟通、青春期教育等细分赛道。以景丽霞老师…

使用坚果云扩容Zotero同步空间的简单快捷方法

本文介绍基于坚果云的WebDAV协议,用于文献管理软件Zotero的文件同步,从而实现Zotero存储空间扩容的方法。 在之前的文章Zotero文献管理软件入门使用方法:软件下载、文献导入、引文插入(https://blog.csdn.net/zhebushibiaoshifu/a…

Java启动脚本

Java启动脚本 编写代码,然后打包 Java-1.0-SNAPSHOT.jar public class test {public static void main(String[] args) {System.out.println("Hello IDEA");} }编写运行脚本 #!/bin/sh WORKDIR$(cd $(dirname $0); pwd) cd $WORKDIRexport JAVA_OPTS"…

VSCode使用ssh远程连接阿里云

1. 终端选择 Windows使用PowerShell Ubuntu和Mac使用Terminal 2. 设置ssh 2.1. 第一台电脑 生成密钥 ssh-keygen -o -t rsa -b 4096 -C "emailexample.com" 按三次回车 查看密钥 cat ~/.ssh/id_rsa.pub 拷贝密钥,粘贴到服务器的密钥框中 2.2. 第…

XLSR-Wav2Vec2:用于语音识别的无监督跨语言表示学习

摘要 本文提出了 XLSR,该方法通过从多种语言的原始语音波形中预训练单个模型,以学习跨语言的语音表示。我们基于 wav2vec 2.0 构建模型,该方法通过对掩蔽后的潜在语音表示解决对比任务进行训练,并联合学习在多种语言之间共享的潜…

图灵完备之路(数电学习三分钟)----数据选择器与总线

1.数据选择器之前我们学习了逻辑与算数的计算,得知两个数字之间的加减和与或的结果是不同的,而一个通用的数字电路不可能只有一个功能,所以我们将在本节引入电路选择器这一“器件”,来实现对两个输入的运算方式的选择,…

Linux下如何设置CUDA的路径

今天遇到一个关于CUDA的问题,我要跑的深度学习代码,他里面有cuda编程,需要编译。但是你运行就报错。 代码提示我大段报错。 (score-denoise) ubuntuGPUA10002:~/wbd/score-denoise_Transformerdepth20$ python train.py Detected CUDA fil…

js树的排序

树 树的前中后序遍历 树是一种重要的非线性数据结构,尤其是二叉树。二叉树的遍历是操作树的基础,主要有前序遍历、中序遍历和后序遍历三种方式。 前序遍历 访问顺序:根结点 -> 左子树 -> 右子树。 遍历规则:首先访问根结…

解码 Red Stuff:Walrus 高效可靠存储的引擎

Red Stuff 是 Walrus 所采用的二维(2D)纠删码协议,定义了数据如何被编码和存储。它是实现高效、安全、且高可用的去中心化存储的关键。通过 Red Stuff,Walrus 成功解决了去中心化存储系统常见的三大难题:安全性、复制效…

【ACP】阿里云云计算高级运维工程师--ACP

文章目录1、简要介绍2、核心特点3、考试相关信息4、适合人群1、简要介绍 阿里云云计算认证ACP(Alibaba Cloud Certified Professional)是面向云计算技术与应用从业者的专业级认证,旨在评估考生对阿里云云计算产品的理解、部署、运维及最佳实…

快速掌握Python编程基础

干货分享,感谢您的阅读!备注:本博客将自己初步学习Python的总结进行分享,希望大家通过本博客可以在短时间内快速掌握Python的基本程序编码能力,如有错误请留言指正,谢谢!(持续更新&a…

「Java案例」鸡兔同笼问题

案例解析 鸡兔同笼求解 《孙子算经》是中国古代重要的数学著作,成书于南北朝时期,其中就记载了一个有趣的问题:鸡和兔在同一个笼子里,鸡和兔共有n条腿, m个头,问鸡和兔各有多少只?编写一个程序…