相同點: 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 字元陣列的整體輸入。字元陣列...