編程語言: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
商膊。
2. UTF-8 編碼規(guī)則
對于 Unicode 代碼點在 U+0800
到 U+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é):
11101000
→E8
第二個字節(jié):
10011111
→9F
第三個字節(jié):
10111110
→BE
因此,對于中文字符 “蟾”表蝙,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}`);
參考資料
2024年12月29日