字符轉換成編碼

編程語言:JavaScript哗蜈;目標效果:將字符轉換成 UTF-8 / URL 編碼嗅战。


相關概念

  • Unicode 是一個國際編碼標準苛预,旨在為世界上所有書寫系統(tǒng)中的字符提供唯一的數(shù)字表示枕磁,每個字符都有一個唯一的代碼點造挽,通常以 \u 開頭篡腌,后面跟著一串十六進制數(shù)字褐荷。
  • UTF-8(Unicode Transformation Format 8-bit)是一種具體的編碼形式,它告訴計算機如何將 Unicode 代碼點轉換為字節(jié)序列嘹悼,以便于存儲或傳輸叛甫。它能夠兼容 ASCII,并且可以對所有 Unicode 字符進行編碼杨伙。
  • URL 編碼是一種具體的編碼形式其监,在 HTTP GET 請求中,URL 中的非 ASCII 字符需要被編碼限匣,以便在網(wǎng)絡上傳輸抖苦。通常,瀏覽器和服務器默認使用的編碼方式是 UTF-8 結合百分比編碼膛腐,也稱為 URL 編碼睛约。


要避免直接在 URL 中使用未編碼的非 ASCII 字符,否則有可能因為不兼容導致亂碼哲身。

驗證:可以通過 在線工具 來實現(xiàn)字符和編碼的相互轉換辩涝。


手動推演過程

1. Unicode 代碼點

  • 找到中文字符對應的 Unicode 代碼點,可以通過 Unicode 官方文檔 查找勘天,也可以通過在線工具完成怔揩。

  • 在文檔中捉邢,“蟾” 對應的 Unicode 代碼點是 \u87fe,或者 U+87FE商膊。


Unicode 代碼點


2. UTF-8 編碼規(guī)則

對于 Unicode 代碼點在 U+0800U+FFFF 之間的字符(包括大部分漢字)伏伐,UTF-8 使用 3 個字節(jié)進行編碼。

每個字節(jié)的格式如下:

  • 第一個字節(jié):1110xxxx晕拆,前 4 位是 1110藐翎,后 4 位是代碼點的高 4 位。

  • 第二個字節(jié):10xxxxxx实幕,前 2 位是 10吝镣,后 6 位是代碼點的中間 6 位。

  • 第三個字節(jié):10xxxxxx昆庇,前 2 位是 10末贾,后 6 位是代碼點的低 6 位。

對于 U+87FE

  • 代碼點 87FE 的二進制表示是 1000 0111 1111 1110整吆;

  • 根據(jù) UTF-8 規(guī)則拱撵,將其拆分為 3 個字節(jié):

    • 第一個字節(jié):11101000E8

    • 第二個字節(jié):100111119F

    • 第三個字節(jié):10111110BE

  • 因此,對于中文字符 “蟾”表蝙,Unicode 代碼點為 U+87FE拴测,在 UTF-8 編碼是 E8 9F BE


3. URL 編碼

URL 編碼的基本規(guī)則是將 UTF-8 編碼的每個字節(jié)用 % 加上兩位十六進制數(shù)表示勇哗。

因此昼扛,E8 9F BE 在 URL 編碼中表示為 %E8%9F%BE


編程實現(xiàn)

使用 JavaScript 語言來完成這個轉換操作欲诺。

// 原始中文字符
const char = '蟾宮曲';

// 1. 找到對應的 Unicode 代碼點抄谐,將其轉換為 UTF-8 編碼 (字節(jié)數(shù)組)
const encoder = new TextEncoder();
const utf8Bytes = encoder.encode(char);

// 2. 將 UTF-8 字節(jié)數(shù)組轉換為十六進制字符串
const utf8Hex = Array.from(utf8Bytes)
    .map(byte => byte.toString(16).padStart(2, '0'))
    .join(' ');     // 以空格分隔的十六進制字節(jié)

// 3. 進行 URL 編碼
const urlEncoded = encodeURIComponent(char);

// 輸出結果
console.log(`原始字符: ${char}`);
console.log(`UTF-8 編碼: ${utf8Hex}`);
console.log(`URL 編碼: ${urlEncoded}`);


參考資料

在線編碼轉換工具Unicode 官方文檔

2024年12月29日

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扰法,一起剝皮案震驚了整個濱河市蛹含,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塞颁,老刑警劉巖浦箱,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異祠锣,居然都是意外死亡酷窥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門伴网,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓬推,“玉大人,你說我怎么就攤上這事澡腾》蟹” “怎么了糕珊?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長毅糟。 經(jīng)常有香客問我红选,道長,這世上最難降的妖魔是什么姆另? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任喇肋,我火速辦了婚禮,結果婚禮上迹辐,老公的妹妹穿的比我還像新娘苟蹈。我一直安慰自己,他們只是感情好右核,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渺绒,像睡著了一般贺喝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宗兼,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天躏鱼,我揣著相機與錄音,去河邊找鬼殷绍。 笑死染苛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的主到。 我是一名探鬼主播茶行,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼登钥!你這毒婦竟也來了畔师?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牧牢,失蹤者是張志新(化名)和其女友劉穎看锉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塔鳍,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡伯铣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了轮纫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腔寡。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜡感,靈堂內(nèi)的尸體忽然破棺而出蹬蚁,到底是詐尸還是另有隱情恃泪,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布犀斋,位于F島的核電站贝乎,受9級特大地震影響粉捻,放射性物質(zhì)發(fā)生泄漏昧诱。R本人自食惡果不足惜列荔,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一巡莹、第九天 我趴在偏房一處隱蔽的房頂上張望邀泉。 院中可真熱鬧豹爹,春花似錦第股、人聲如沸酌毡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啡氢,卻和暖如春状囱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倘是。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工亭枷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搀崭。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓叨粘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘤睹。 傳聞我的和親對象是個殘疾皇子升敲,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容