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

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

開(kāi)發(fā) 后端
今天終于把JAVA里一個(gè)比較頭痛的問(wèn)題——字符編碼弄清晰了,所以寫(xiě)一篇文章來(lái)紀(jì)念一下,也為大家提供一點(diǎn)自己的心得。

今天終于把JAVA里一個(gè)比較頭痛的問(wèn)題——字符編碼弄清晰了,所以寫(xiě)一篇文章來(lái)紀(jì)念一下,也為大家提供一點(diǎn)自己的心得。

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

定義一個(gè)字符串

String name = "堂";

這個(gè)字符串就一個(gè)字符,把它取出來(lái)

char c_name = name.charAt(0);

JAVA里的char型是十六位的(兩個(gè)字節(jié)),但是如果是用UTF-8的話可能會(huì)不只兩位(UTF-8是變長(zhǎng)存儲(chǔ)的),那看來(lái)JAVA本身并不是用UTF-8來(lái)保存的,口說(shuō)無(wú)憑,做個(gè)實(shí)驗(yàn)吧。

首先看看char里保存的內(nèi)容  

 

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

  

結(jié)果是58 02

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

為了方便,我寫(xiě)了一個(gè)輔助方法printbyte,作用是把一個(gè)byte數(shù)組的每個(gè)元素按照十六進(jìn)制格式打印出來(lái),同樣為了方便,我把它作為靜態(tài)方法。 

 

#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);

 

結(jié)果是e5 a0 82 length = 3

哇,三個(gè)字節(jié)!看來(lái)JAVA內(nèi)部用的真不是UTF-8,那用的是什么呢?UTF-16?看一下便知。  

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

 

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

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

 

哈哈,I got it!不多不少兩個(gè)字節(jié),內(nèi)容也一樣。果然是它。同時(shí)我在里面也看到,UNICODE的編碼還有一個(gè)LE,這里的BE,LE我想應(yīng)該是bigendian和littleendian吧。

【編輯推薦】

  1. 如何在PHP中使用正則表達(dá)式
  2. Java正則表達(dá)式應(yīng)用詳解
  3. Java正則表達(dá)式初學(xué)者使用法簡(jiǎn)介
責(zé)任編輯:龐桂玉 來(lái)源: CSDN
相關(guān)推薦

2018-01-22 17:02:48

Python字符編碼ASCII

2009-12-24 17:16:23

Ado Oledb

2022-02-15 10:11:18

二進(jìn)制匯編代碼函數(shù)調(diào)用

2024-03-04 11:10:01

2011-04-07 16:23:09

Web網(wǎng)頁(yè)設(shè)計(jì)編碼

2024-12-05 12:01:09

2015-05-14 15:38:40

javajava內(nèi)存泄露

2011-11-17 13:59:41

Java內(nèi)存管理內(nèi)存泄露

2011-12-16 16:02:42

Java

2009-06-08 19:52:47

Eclipse字符編碼

2011-02-24 09:27:00

Java字符集編碼

2016-05-31 10:11:51

2023-04-13 00:24:00

前端編碼JavaScrip

2010-10-08 09:51:52

Mysql設(shè)置字符

2009-06-11 17:31:27

Java泛型

2010-03-12 08:55:06

Java內(nèi)省反射

2009-06-16 11:32:00

Java泛型

2017-09-23 15:28:32

JavaOptional方法

2023-11-08 09:49:19

Java實(shí)踐

2018-02-26 16:07:48

Android3DDepth
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲第一福利视频 | 午夜电影福利 | 男人亚洲天堂 | 国产视频观看 | 成人免费观看男女羞羞视频 | 午夜成人在线视频 | 亚洲精品免费在线观看 | 国产片侵犯亲女视频播放 | 国产伦一区二区三区 | 天堂在线网 | 欧美成人猛片aaaaaaa | 日本激情视频中文字幕 | 欧美激情综合色综合啪啪五月 | 日本三级网站在线 | 999久久久国产精品 欧美成人h版在线观看 | 成人在线视频一区二区三区 | 欧美在线亚洲 | 精品综合久久久 | 一级黄色录像片子 | 欧美一级在线观看 | av香港经典三级级 在线 | 超碰人人插 | 成人av网页 | 99久久精品国产一区二区三区 | 91精品国产乱码久久久久久久久 | 三区四区在线观看 | 中文字幕a√ | 国产日韩一区二区三区 | 日韩午夜在线观看 | 成人欧美一区二区三区在线观看 | 国产第一页在线播放 | 欧美黄色网络 | 拍真实国产伦偷精品 | 中文字幕一区二区三区四区 | 亚洲精品乱码久久久久久蜜桃91 | 欧美xxxx黑人又粗又长 | 国产精品国产精品国产专区不片 | 精品国产精品一区二区夜夜嗨 | 亚洲欧美在线一区 | 欧美一级特黄aaa大片在线观看 | 欧美综合视频 |