成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JAVA里字符編碼的探索與理解

開發 后端
今天終于把JAVA里一個比較頭痛的問題——字符編碼弄清晰了,所以寫一篇文章來紀念一下,也為大家提供一點自己的心得。

今天終于把JAVA里一個比較頭痛的問題——字符編碼弄清晰了,所以寫一篇文章來紀念一下,也為大家提供一點自己的心得。

眾所周知,JAVA為了國際通用,用的是UNICODE來保存里面的字符。而UNICODE只是一個種字符集,字符的存儲和表示要用到一定的字符編碼格式,而與UNICODE對應的字符編碼格式就是我們常看到的UTF-8,UTF-16等等,而UTF-8是最常用的,所以人們常常把它和UNICODE等同起來(我以前就是這樣的),這在某些情況下是沒有錯的,但這樣的理解在JAVA里就會產生一些混淆。我們用下面的程序來演示一下。

定義一個字符串

String name = "堂";

這個字符串就一個字符,把它取出來

char c_name = name.charAt(0);

JAVA里的char型是十六位的(兩個字節),但是如果是用UTF-8的話可能會不只兩位(UTF-8是變長存儲的),那看來JAVA本身并不是用UTF-8來保存的,口說無憑,做個實驗吧。

首先看看char里保存的內容  

 

int low = (c_name) & 0xff;//取c_name的低位
  int high = (c_name >> 8) & 0xff;//取c_name的高位
  System.out.println(Integer.toHexString(high) + " " + Integer.toHexString(low));

  

結果是58 02

只有兩個字節而已(16位),那么真正的UTF-8編碼的內容是什么呢,再看看吧。

為了方便,我寫了一個輔助方法printbyte,作用是把一個byte數組的每個元素按照十六進制格式打印出來,同樣為了方便,我把它作為靜態方法。 

 

#p#

 public static void printbyte(byte[] bt)
  {
  for (int i = 0; i < bt.length; i++)
  {
  int hex = (int)bt[i] & 0xff;
  System.out.print(Integer.toHexString(hex) + " ");
  }
  System.out.println(" length = "+bt.length);
  }
  byte[] utf_8 = name.getBytes("utf-8");
  printbyte(utf_8);

 

結果是e5 a0 82 length = 3

哇,三個字節!看來JAVA內部用的真不是UTF-8,那用的是什么呢?UTF-16?看一下便知。  

byte[] utf_16 = name.getBytes("utf-16");
  printbyte(utf_16);

 

結果是fe ff 58 02 length = 4,靠,四個字節了。咦?后面的低16位不正是和開始c_name的十六進制表示一樣的嗎?看來JAVA真正的內部字符編碼和UTF-16有或多或少的聯系。JAVA內部究竟是用的什么字符編碼呢?這個問題我也找了很久,后來在THINK IN JAVA 3rd的12章里看到一個例子出現了UTF-16BE,難道是它?  

byte[] utf_16be = name.getBytes("utf-16be");
  printbyte(utf_16be);
  結果出來了:58 02 length = 2

 

哈哈,I got it!不多不少兩個字節,內容也一樣。果然是它。同時我在里面也看到,UNICODE的編碼還有一個LE,這里的BE,LE我想應該是bigendian和littleendian吧。

【編輯推薦】

  1. 如何在PHP中使用正則表達式
  2. Java正則表達式應用詳解
  3. Java正則表達式初學者使用法簡介
責任編輯:龐桂玉 來源: CSDN
相關推薦

2018-01-22 17:02:48

Python字符編碼ASCII

2009-12-24 17:16:23

Ado Oledb

2022-02-15 10:11:18

二進制匯編代碼函數調用

2011-04-07 16:23:09

Web網頁設計編碼

2024-03-04 11:10:01

2024-12-05 12:01:09

2011-12-16 16:02:42

Java

2015-05-14 15:38:40

javajava內存泄露

2011-11-17 13:59:41

Java內存管理內存泄露

2011-02-24 09:27:00

Java字符集編碼

2009-06-08 19:52:47

Eclipse字符編碼

2010-10-08 09:51:52

Mysql設置字符

2016-05-31 10:11:51

2009-06-11 17:31:27

Java泛型

2023-04-13 00:24:00

前端編碼JavaScrip

2023-11-08 09:49:19

Java實踐

2010-03-12 08:55:06

Java內省反射

2009-06-16 11:32:00

Java泛型

2017-09-23 15:28:32

JavaOptional方法

2022-05-18 10:56:58

Java字符串編碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男人的天堂亚洲 | 毛片久久久 | av在线黄| 欧美一级二级三级视频 | 欧美4p| 国产欧美二区 | 国产欧美精品一区 | 久草网视频 | 国产偷久久一级精品60部 | 一级视频黄色 | 美女久久视频 | 久久亚 | 精品一区二区三区在线观看国产 | 国产在线精品区 | 日韩一区二区三区四区五区 | 日日夜夜操天天干 | 在线亚洲精品 | 91免费福利视频 | 成人在线精品视频 | 日韩国产一区二区三区 | 四季久久免费一区二区三区四区 | 毛片免费观看视频 | 成人精品一区二区三区中文字幕 | 亚洲视频在线免费观看 | 凹凸日日摸日日碰夜夜 | 午夜精品久久久久久不卡欧美一级 | 国产精品成av人在线视午夜片 | 欧美精品综合在线 | 亚洲一区二区三区在线 | 久久蜜桃精品 | 国产在线a| 日韩视频二区 | 精品欧美乱码久久久久久1区2区 | 天天拍夜夜爽 | 亚洲第1页 | 久久久国产一区二区三区四区小说 | 中文字幕 欧美 日韩 | 超碰人人艹 | 在线国产一区二区 | 欧美日韩亚洲国产 | 在线观看日韩精品视频 |