了解js字串的碼元與碼點

2021-10-07 18:21:17 字數 2205 閱讀 1949

相同點: charcodeat與codepointat都是字串例項的方法,用途都是返回指定索引位字元的unicode編碼

不同點:charcodeat與codepointat匹配索引位的規則不一樣,charcodeat是根據碼元來匹配,而codepointat是根據碼點來進行匹配的

這兩點都與計算機程式設計有關,早期的時候,儲存空間比較寶貴,unicode儲存文字,16位2進製叫做乙個碼元(code unit)

計算機發展,對unicode文字進行了擴充套件,將某些文字擴充套件到了32位,佔了兩個碼元,兼中國這些二進位制的字元叫做碼點(code point)

看兩個經典的漢字為例:

const text =

"?";

const tet =

"吉"// console.log(/^.$/.test(text))

從輸出結果我們可以看出,?(ji) 的長度竟然不為1,為2。且charat與codepoint對相同的字元處理的返回結構是不一樣的.

這其中的原因就是charcodeat是以乙個碼元為乙個索引,codepointat是以乙個碼點為乙個索引進行處理的。

特別注意:碼點可以是乙個碼元,也可以是兩個碼元。

字串的length屬性返回的是碼。所以在一些字串如果要處理長度的時候要注意這一點

我們從控制台輸出結果可知道,?(ji)的unicode編碼是\ud842\udfb7,占用了兩個碼元。

?這個字的unicode編碼是\ud842\udfb7,占用了兩個碼元。

所以當用charcodeat(0)是匹配0位的碼元,也就是返回給我們55362。

當用codepointat(0)是匹配0位的碼元,codepointat能識別出字串的碼點,所以反回134071。

charcodeat是以碼元單位進行處理的,也就是按照每16位2進製數為單位。乙個16位2進製就是一位,所以處理不了unicode擴充套件碼字元(32位2進製)。它會把32位2進製數當成兩個16位2進製數處理。

codepointat也是以碼元為單位來處理的。與charcodeat不同的是,當處理當前位碼元時,如果 超過了位進製數值得上限時會以32位2進製數來處理

也可以通過codepointat來判斷當前字元是是32位的碼點還是16位的碼元

function

is32bit

(char)

console.

log(

is32bit

("吉"))

//false

console.

log(

is32bit

("?"))

//true

同樣的,也可以通過這個方法來判斷以字串真實的長度(碼點的長度)

function

getlengthofcodepoint

(text)

len++;}

return len;

//1}

Js獲取字串asc碼

有時候會需要用到字元的ascii碼,一時之間除錯時可能會忘記字元與ascii碼對應的數字。最近喜歡用瀏覽器控制台直接跑js 將這個 直接貼到瀏覽器控制台,即可除錯 谷歌瀏覽器快捷鍵 ctrl shift j function getasciicode var getascii 把這些ascii碼按順...

字串與ASCII碼互換

public static void main string args ascii碼怎麼轉為字元 public static void asctostring 就是將string字元型別資料轉換為integer整型資料 第一步把獲取到的ascii碼放入字串陣列內 第二步,integer.parsei...

字串的了解與字元陣列的鞏固

1620 7 唐大智 2016年10月 14日 連續第十四天總結 內容 a 1 字元陣列80 2 字串30 b 1 字元陣列的的輸出,用cout語句輸出整個字元陣列,格式如下 a cout 字元陣列名 表示從字元陣列名所指的位置,依次輸入字元,直到遇見第乙個結束標記。2 字元陣列的整體輸入。字元陣列...