計算機能夠理解的是01位。
編碼就是讓計算機能夠理解人類的符號。
計算機中存儲信息的最小單元是一個字節即 8 個 bit,所以能表示的字符范圍是 0~255 個
> 然而,人類的語言太多,因而表示這些語言的符號太多,無法用計算機中的一個基本單元表示一個字符。
因此一個人類語言符號需要多個計算機基礎單元(byte)表示。
然而針對不同的語言,表示一個人類符號的byte個數可能不同,以下看具體區別。
### char
char是一個新的數據結構,一個char表示一種人類語言的一個字符。
不同的語言(實質應該是不同的編碼方式),一個char對用的byte個數不同。
- ASCII 碼,總共 128 個,用一個字節的低 7 位表示
- 擴展 ASCII 編碼。ISO-8859-1 仍然是單字節編碼,它總共能表示 256 個字符。
- GB2312,雙字節編碼。總的編碼范圍是 A1-F7,其中從 A1-A9 是符號區,總共包含 682 個符號,從 B0-F7 是漢字區,包含 6763 個漢字。
- GBK ,為了擴展 GB2312,加入更多的漢字,它的編碼范圍是 8140~FEFE(去掉 XX7F)總共有 23940 個碼位,它能表示 21003 個漢字,它的編碼是和 GB2312 兼容的,也就是說用 GB2312 編碼的漢字可以用 GBK 來解碼,并且不會有亂碼。
- GB18030,是我國的強制標準,它可能是單字節、雙字節或者四字節編碼,它的編碼與 GB2312 編碼兼容,這個雖然是國家標準,但是實際應用系統中使用的并不廣泛。
- UTF-16,說到 UTF 必須要提到 Unicode(Universal Code 統一碼),ISO 試圖想創建一個全新的超語言字典,世界上所有的語言都可以通過這本字典來相互翻譯。可想而知這個字典是多么的復雜,關于 Unicode 的詳細規范可以參考相應文檔。Unicode 是 Java 和 XML 的基礎,下面詳細介紹 Unicode 在計算機中的存儲形式。
UTF-16 具體定義了 Unicode 字符在計算機中存取方法。UTF-16 用兩個字節來表示 Unicode 轉化格式,這個是定長的表示方法,不論什么字符都可以用兩個字節表示,兩個字節是 16 個 bit,所以叫 UTF-16。UTF-16 表示字符非常方便,每兩個字節表示一個字符,這個在字符串操作時就大大簡化了操作,這也是 Java 以 UTF-16 作為內存的字符存儲格式的一個很重要的原因。
- UTF-8,變長的。
并且這些編碼方式定義了完整的轉化規則。按照這個規則計算機可以正確的表示我們的字符。
編碼方式的選擇: 是存儲空間重要還是編碼的效率重要等因素。
[Java幾種常見的編碼方式](https://www.cnblogs.com/mlan/p/7823375.html)
### java項目源代碼文件編碼
1. 源代碼的編譯,可以選擇編碼方式:一般UTF-8,可以是GBK等。但是必須和源代碼文件的編碼一致。
否則編譯后的class文件,中文已經是亂碼。
[Java如何獲取文件編碼格式](http://www.cnblogs.com/java0721/archive/2012/07/21/2602963.html)
[IDEA的項目編碼設置](https://blog.csdn.net/mingjie1212/article/details/58586710)
### java文件版本
項目的源代碼版本、編譯用的jdk、編譯后的class文件jdk版本(編譯版本)
[IDEA源代碼版本模式1.5問題](https://www.jianshu.com/p/451271c4de11)
- 在看的書和文章
- Java程序員手冊
- 思維方式
- 面向服務
- Dubbo
- StringBoot
- 001.應用部署
- 002.注解學習
- SpringCloud
- SpringCloud入門
- Dbs
- 分布式
- Ffp
- 多線程
- 多線程小知識
- Java鎖認識
- Netty
- Netty學習目錄
- 讀寫事件流程分析與相關API
- 數據
- 大數據學習
- 學習目錄
- Hadoop學習
- Hadoop組建安裝
- ssh配置免密登陸
- Hadoop偽集群模式
- HBase偽集群模式
- Hive安裝
- 常用操作命令
- 問題記錄
- DOLIST
- 學習資料
- Spark
- 一些概念介紹
- 數據庫
- Oracle相關
- 批量測試數據生成
- MySQL相關
- Redis
- 常用操作
- 機器學習
- 認識
- Kafka
- 監控
- 分布式相關
- RPC
- 中間件
- ElasticSearch
- ES環境搭建
- Python客戶端創建索引
- Es的api常用操作
- SQL查詢引擎
- Es數DB的數據同步
- ActiveMQ
- ActiveMQ介紹
- 分享
- Skyeye
- 組件安裝配置
- Dubbo服務Demo應用部署
- Kafka安裝配置
- RabbitMq配置
- Docker
- Docker學習文章
- Docker的大數據平臺之路
- Docker環境搭建
- ubuntu16安裝docker
- Docker鏡像加速
- 使用Docker快速搭建中間件
- Docker環境使用mysql
- Docker環境的中間件搭建匯總
- Docker鏡像容器管理
- Docker鏡像創建
- Docker創建可用的系統容器
- Kubernetes
- etcd安裝
- flanneld安裝
- kubernetes環境安裝
- kubernetes源碼編譯
- Linux相關
- Linux操作系統
- Deepin操作系統
- 新系統環境準備
- Linux系統小工具
- Linxu配置時間服務器同步
- DNS服務器dnsmasq
- Linux命令
- 常用命令
- 計算機基礎
- README
- 數據結構
- 面試題總結
- 計算機組層原理
- 計算機組層原理
- 其它語言
- Python
- Python環境搭建
- Python學習總結
- Python語法學習
- Python模塊學習
- MySQLdb
- scrapy
- Python的exception
- PythonNLP入門
- Go
- 工具組件
- Jenkins
- Jenkins認識
- Jenkins安裝配置
- Jenkins插件使用
- Jenkins項目常用配置
- Git
- Git使用說明
- NLP
- 入門級別
- 一些概念
- faiss介紹
- WMD介紹