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
英文地址,請注明出處:http://en.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個頭,問雞和兔各有多少只?編寫一個程序…