Java 字元編碼

来源:https://www.cnblogs.com/knhap/archive/2022/12/26/17004896.html
-Advertisement-
Play Games

轉義字元 一些特殊字元。 | 轉義字元 | 含義 | | : : | : : | | \n | 換行 | | \r | 回車 | | \0 | 結束字元 | | \s | 空格 | | \’ | 單引號 | | \" | 雙引號 | | \\ | 反斜杠 | 字元編碼 ASCII American ...


轉義字元

一些特殊字元。

轉義字元 含義
\n 換行
\r 回車
\0 結束字元
\s 空格
\’ 單引號
\" 雙引號
\\ 反斜杠

字元編碼

ASCII

American Standard Code for Information Interchange,美國信息交換標準代碼。

電腦發明之初,基本只考慮了美國的需求,美國大概只需要 128 個字元。

數字 32~126 表示的字元都是可列印字元。

image

0~31 和 127 表示一些不可列印的字元。

數字 縮寫/字元 解釋 轉義字元
0 NUL(null) 空字元 \0
8 BS(backspace) 退格 \b
9 HT(horizontal tab) 水平製表符 \t
10 LF(NL line feed,new line) 換行鍵 \n
13 CR(carriage return) 回車鍵 \r
27 ESC 換碼
127 DEL(delete) 刪除

ASCII 碼對美國夠用,但對其他國家是不夠的。

各國的電腦廠商發明瞭各自的編碼方式以表示自己國家的字元,為了保持與 ASCII 碼的相容性,一般都是將最高位設置為 1。

就是說,當最高位為 0 時,表示 ASCII 碼,當為 1 時就是各個國家自己的字元。

ISO 8859-1

ISO 8859-1 又稱 Latin-1,同樣使用一個位元組表示一個字元。

其中 0~127 與 ASCII 一樣,128~255 規定了不同的含義。

Windows-1252

基本上可以認為,ISO8859-1 已被 Windows-1252 取代,在很多應用程式中,即使文件聲明它採用的是 ISO 8859-1 編碼,解析的時候依然被當作 Windows-1252 編碼。

GBK

GBK 使用固定的兩個位元組表示字元,高位位元組範圍是 0x81~0xFE ,低位位元組範圍是 0x40~0x7E 和 0x80~0xFE。

需要註意的是,低位位元組是從 0x40(即64)開始的,因此低位位元組的最高位可能為 0。

Unicode

Unicode 給世界上所有字元都分配了一個唯一的數字編號,編號範圍從 0x000000~0x10FFFF。

每個字元都有一個 Unicode 編號,這個編號一般寫成十六進位,在前面加 U+。

但它並沒有規定這個編號怎麼對應到二進位表示。

編號怎麼對應到二進位表示?主要有 UTF-32、UTF-16 和 UTF-8 。

UTF-32

字元 Unicode 編號的整數二進位形式,4個位元組。

UTF-16

UTF-16 使用變長位元組表示。對於編號在 U+0000 ~ U+FFFF的字元(常用字元),直接用 2 個位元組表示。編號在 U+10000 ~ U+10FFFF的字元(增補字元集),需要使用 4 個位元組表示。

在 Java 內部進行字元處理時,採用的是 Unicode 編碼,具體的編碼格式是 UTF-16。

UTF-8

UTF-8 使用變長位元組表示,字元使用的位元組個數與其 Unicode 編號的大小有關,編號小的使用的位元組就少,位元組個數為 1~4 不等。

編號範圍 二進位格式
0x00 ~ 0x7F(0 ~ 127) 0xxx xxxx
0x80 ~ 0x7FF(128 ~ 2047) 110x xxxx 10xx xxxx
0x800 ~ 0xFFFF(2048 ~ 65535) 1110 xxxx 10xx xxxx 10xx xxxx
0x10000 ~ 0x10FFFF(65536以上) 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx

UTF-8 將字元看作整數,轉化為二進位形式(去掉高位的 0),然後將二進位位從右向左依次填入對應的二進位格式 x 中,填充完後,如果對應的二進位格式還有沒填的 x,則設為 0。

/*

如 '馬' 的 Unicode 編號是 0x9A6C,整數編號是 39532,二進位 1001 101001 101100

對應的 UTF-8 二進位格式是:1110 xxxx 10xx xxxx 10xx xxxx

將二進位 1001 101001 101100 從右到左依次填入二進位格式中

結果就是其 UTF-8 編碼:1110 1001 1010 1001 1010 1100

*/

UTF-8 是相容 ASCII 的,對大部分中文字元而言,需要使用三個位元組表示。

編碼轉換

不同編碼格式之間可以藉助 Unicode 編號進行編碼轉換。可以認為,每種編碼都有一個映射表,存儲 Unicode 編號和其特有的字元編碼之間的對應關係。

編碼轉換的具體過程可以是:一個字元從 A 編碼轉到 B 編碼,先找到字元的 A 編碼格式,通過 A 編碼的映射表找到其 Unicode 編號,然後通過 Unicode 編號再查找 B 編碼的映射表,找到字元的 B 編碼格式。

亂碼問題

解析錯誤:使用錯誤的編碼進行解析,如小明採用 Windows-1252 寫了個文件,發送給了小紅,小紅 使用 GBK 來解析這個字元,看到的可能就是亂碼。

編碼轉換錯誤:在錯誤解析的基礎上還進行了編碼轉換。如上述,小紅用 GBK 解析打開後看到亂碼,又轉換成了 UTF-8 編碼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一個簡單的C#實例。包括:GRPC文件的創建生成、服務端和客戶端函數類庫的封裝、創建服務端和客戶端調用測試。若有錯誤或更好的方法還請指正。 1、創建並生成GRPC服務文件 (1)打開vs2022,創建新項目控制台應用(其他應用好像不行)。 (2)需要安裝三個nuget包,如圖: (3)項目添加新建項 ...
  • 在前面隨筆介紹的基於SqlSugar的WInform端管理系統中,數據提供者是直接訪問資料庫的方式,不過窗體界面調用數據介面獲取數據的時候,我們傳遞的是標準的介面,因此可擴展性比較好。我曾經在隨筆《基於SqlSugar的開發框架循序漸進介紹(5)-- 在服務層使用介面註入方式實現IOC控制反轉》中介... ...
  • 在實際應用開發中,隨著項目業務逐漸複雜,耦合度會越來越高,維護成本也會直線上升,所以解耦也變得越來越重要。Prism框架為WPF開發中解耦提供了非常便捷的應用。今天主要以一個簡單的小例子,簡述WPF開發中Prism框架的簡單應用,如有不足之處,還請指正。 ...
  • AIR32F103CBT6 和 AIR32F103CCT6 分別帶 32K Byte和 64K Byte 記憶體. 對於48pin封裝的 AIR32F103, 32K和64K的記憶體已經是市面上M3晶元中相當不錯的容量, 至於64pin封裝的AIR32F103RPT6, 96K的記憶體只在市場上的高端型號... ...
  • 近年來,有關數據泄露相關的新聞事件屢見不鮮,不斷地引發大眾的討論和擔憂。各家企業都或多或少在承受相關的數據安全風險,這種可能性會給企業運行帶來額外的風險,包括大眾的質疑以及政府的處罰等。 Facebook超5億用戶個人數據遭到泄露; Elector Software投票應用泄露超650萬以色... ...
  • 案例介紹 歡迎來到我的小院,我是霍大俠,恭喜你今天又要進步一點點了!我們來用JavaScript編程實戰案例,製作提高打字速度的小游戲-調皮的字母。點擊與屏幕上字母相對應的按鍵,若按鍵與出現的字母一致,則可以獲得相應的分數。 案例演示 根據屏幕上隨機出現的字母來點擊鍵盤上對應的按鍵,可自行調節字母下 ...
  • 案例介紹 歡迎來的我的小院,我是霍大俠,恭喜你今天又要進步一點點了!我們來用JavaScript編程實戰案例,做一個乘法積分游戲。乘法游戲主要通過用戶輸入的數值和程式計算的數值進行對比,正確積一分,錯誤扣一分。通過實戰我們將學會JSON.parse方法、JSON.stringify方法、localS ...
  • 歡迎來的我的小院,恭喜你今天又要漲知識了! 案例內容 利用JavaScript實現搜索框的移動展開。 演示 學習 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>小院里的霍大俠</title> </hea ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...