x的實體編碼解釋

2021-10-24 15:59:05 字數 1293 閱讀 9120

在 node 層利用 cheerio 解析網頁時,輸出的中文內容都是以 &#x 開頭的一堆像亂碼一樣的東西,嘗試過各種編碼都無效,而且神奇的是,將這一堆「亂碼」儲存成網頁後,通過瀏覽器開啟又可以正常顯示。這到底是什麼????

縮減後的示例**如下:

const cheerio = require(『cheerio『);

const $ = cheerio.load(『你好

『)console.log($(『#content『).html()) //你好

其實,上面那一堆亂碼一樣的東西,它的學名叫實體編碼 entity code。

下面引用下知乎搜到的答案。

在 html 中,某些字元是預留的,例如小於號「<」、大於號「>」等,瀏覽器會將它們視作標籤。如果想要在html中顯示這些預留字元,我們就要用到字元實體(character entities)。我們比較熟悉的字元實體有空格「 」,小於號「<」,大於號「>」等。這樣的格式比較語義化,容易記憶,但其實字元實體有其他的格式:

&name;

&#dddd;

&#xhhhh;

這三種轉義方式都稱作 character reference,第一種是 character entity reference,「&」符號後接預先定義好的 entity 名稱。

後兩種是 numeric character reference,數字取值為目標字元的 unicode code point;以「&#」開頭的後接十進位制數字,「&#x」開頭的後接十六進製制數字。

從 html4 開始,numeric character reference 以 unicode 為準,與文件編碼無關。「你好」二字分別是 unicode 字元 u+4f60 和 u+597d,十六進製制表示的 code point 數值「4f60」和「597d」,同時也就是十進位制的「20320」和「22909」。所以

在html中輸入

你好你好

都會顯示為「你好」。

知道原因後,那麼如何解決上述的問題呢?

方法一:使用cheerio提供的屬性

cheerio缺省會對entity進行decode,我們只需要關閉該功能即可

const cheerio = require(『cheerio『);

const $ = cheerio.load(『你好

『, )

console.log($(『#content『).html()) // 你好

方法二:手動decode

function decode(str) );

return str;

}

編碼通俗解釋

很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為 位元組 再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到這樣是好的,於是它們就這機器稱為 計...

onehot編碼解釋

one hot編碼,又稱為一位有效編碼,主要是採用n位狀態暫存器來對n個狀態進行編碼,每個狀態都由他獨立的暫存器位,並且在任意時候只有一位有效。one hot編碼是分類變數作為二進位制向量的表示。這首先要求將分類值對映到整數值。然後,每個整數值被表示為二進位制向量,除了整數的索引之外,它都是零值,它...

常用編碼解釋

計算機是美國人發明的,因此,最早只有127個字元被編碼到計算機裡,也就是大小寫英文本母 數字和一些符號,這個編碼表被稱為ascii編碼,比如大寫字母a的編碼是65,小寫字母z的編碼是122。但是要處理中文顯然乙個位元組是不夠的,至少需要兩個位元組,而且還不能和ascii編碼衝突,所以,中國制定了gb...