第一次二進位檔案真實地咬我,它不是在電腦科學課上--它是在生產錯誤中。我維護的一個 WordPress 外掛程式以一種損壞任何非英語字元的方式儲存一個短字串,為了找出損壞發生在哪裡,我必須查看實際的位元組。我把斷掉的字串貼到"文字轉二進位"我在網路上找到的盒子,拿回一面 1 和 0 的牆,立即意識到該工具只處理了 ASCII 字符,並悄悄地去掉了重音字符。它向我展示的字節是一個謊言,我浪費了一個下午的時間來追逐錯誤的堆疊層。
這就是二進位轉換的問題:它看起來像一個玩具,大多數免費工具都像一個玩具一樣對待它。合適的翻譯器必須透過 UTF-8 對人們實際輸入的全部字元(口音、表情符號、中文、阿拉伯語)進行編碼,現代網路運行編碼,並且必須逐字節解碼。我建造 工具。dev,WP Adminify 插件,以及相當數量的 Laravel 和 React,所以我比我想要的更多地在文字及其位元組表示之間移動,並且我建立了 二進制翻譯 正確轉換每個字符,而不僅僅是簡單的 128。
TL;DR: 二進位翻譯器將文字轉換為電腦儲存的 1 和 0,並將這些 1 和 0 轉換回文字。捕獲的是字元編碼:ASCII 僅涵蓋 128 個字符,而真實文字需要 UTF-8,其中一個字符可以是一到四個位元組。這 二進制翻譯 對完整內容進行編碼和解碼 統一碼 範圍 - 包括表情符號 - 二進位、十六進位、十進位和八進位,完全在瀏覽器中,並告訴您當貼上無法解碼時哪個令牌錯誤。
什麼是二進位翻譯器,真的嗎?
二進位翻譯器是人類可讀文字和電腦用於儲存該文字的數字表示之間的轉換器。您鍵入的每個字元都儲存為一個或多個位元組(從0 到255 的數字),每個位元組都可以寫成二進位(以2 為基數)、十六進位(以16 為基數)、十進位(以10 為基數)或八進位(以8 為基數)。翻譯&引用;嗨引用;二進位給出 01001000 01101001;兩組八位是 "H" 的兩個位元組。和&引用;我&引用;。
單字&引用;翻譯&引用;在這裡做真正的工作,因為涉及翻譯表。位元組值 72 本身並不意味著字母 "H" - 它的意思是"H"只是因為字元編碼是這麼說的。對於基本的英文字母、數字和通用標點符號,該映射是 ASCII,這是 20 世紀 60 年代的標準,為值 0 到 127 分配 128 個字元。ASCII 是為什麼 "H"是 72,空格是 32,這是二進位轉換中每個人都做對的部分。
問題從值 127 以上開始。世界類型遠超過 128 個不同的字符,處理其餘字符的編碼(幾乎可以肯定是您的瀏覽器、資料庫和 JSON 使用的編碼)是 UTF-8。一個好的二進位翻譯器實際上是一個 UTF-8 編解碼器,頂部有一個鹼基轉換層。這 二進制翻譯 正是這樣建構的,這就是為什麼它可以往返包含表情符號的字串並將相同的字元交還給你。
將文字轉換為二進位實際上如何運作?
將文字轉換為二進位是一個兩階段管道,理解這些階段可以解釋該工具所做的一切。第一階段是 將字元編碼為位元組,第二個是 在您選擇的基數中寫入每個位元組.
編碼是 UTF-8 所在的位置。 UTF-8 是一種可變長度編碼:如果一個字元是普通的 ASCII 字符,則需要一個字節;對於大多數拉丁重音字母和許多符號,需要兩個字節;對於世界大部分地區,需要三個字節' s 腳本包括中文、日文和韓文,四個位元組用於不太常見的字元和表情符號。所以&引用;A&引用;是一個字節,&引用;是兩個,&引用;中&引用;是三個,面表情符號是四個。編碼器穿過字串,對於基本範圍之外的字符,它會產生正確的多字節序列,並帶有標記後面有多少字節的前導位。
第二階段是純算術。一旦有了位元組值列表,用二進位寫它們意味著將 0 到 255 之間的每個數字表示為 8 位,零填充,因此每個位元組都是相同的寬度。十六進位將每個位元組寫成兩個字元(00 到 ff),這就是為什麼十六進位是查看原始資料的緊湊型首選。八進位每位元組使用三位數字,十進位僅顯示普通數字。這 二進制翻譯 讓您立即在所有四個基數之間翻轉,因為底層位元組相同 - 只是顯示格式發生變化。
翻譯器如何將二進位解碼回文字?
解碼會反轉管道,這是大多數工具悄悄失敗的方向。首先工具必須這樣做 將輸入讀入位元組值,那麼它就必須這樣做 將這些位元組解碼為 UTF-8,重新轉換為字元.
讀取輸入意味著標記化。如果您在位元組之間貼上帶有空格的二進位文件,則每組都是一個位元組。如果您貼上一段長的連續位元,工具會將它們分組為八個 - 只有當總長度為八個的倍數時才有效,因此標記奇數長度而不是默默地誤讀。相同的邏輯適用於十六進位:每個位元組有兩個字符,因此奇數個十六進位數字是一個錯誤。逗號、空格、製表符和換行符都充當分隔符,因此您可以貼上複製的任何格式,而無需先重新格式化。
第二階段從位元組重建字符,這就是 UTF-8 和#39;結構很重要。 0-127 範圍內的位元組是獨立字元。具有特定高位元模式的位元組表示兩個、三個或四個位元組序列的開始,並且後面的位元組必須有自己的延續模式。如果它們不這樣做 - 因為缺少一個位元組,或者序列被切斷,或者資料一開始就不是有效的 UTF-8 - 二進制翻譯 報告位元組序列不是有效的文本,而不是發出替換字元或垃圾。誠實就是重點:當解碼失敗時,您想知道資料是錯誤的,而不是盯著 mojibake 想知道工具是否壞了。
二進制、十六進制、十進制或八進制 - 我應該使用哪一個?
它們都代表相同的字節,因此選擇是關於誰在閱讀以及它們習慣什麼。每個鹼基都有一個自然擬合的利基市場。
| 基地 | 每個位元組的位數 | 最好 | "H" 的範例; (72) |
|---|---|---|---|
| 二進制 (2) | 8 | 學習,位級工作,顯示精確的結構 | 01001000 |
| 十六進位 (16) | 2 | 查看原始資料、偵錯、顏色和位元組轉儲 | 48 |
| 小數 (10) | 1點3 | 人性化的位元組值,快速參考 | 72 |
| 八進制 (8) | 3 | Unix 檔案權限,一些舊系統 | 110 |
二進制是最明確的,也是最適合教學的,因為你可以看到每一位,但它是冗長的--每個位元組八個字元加起來很快。十六進制是您在實踐中實際使用最多的內容:它很緊湊,它乾淨地映射到每個兩個字元的字節,並且格式十六進制編輯器、內存轉儲和顏色代碼都說明了這一點。當您只想了解一個字元時,十進制很方便'數值。八進制是一個利基保留,在 Unix 權限位元中最為熟悉 755(,主要是為了工具完整) 二進制翻譯 在所有四個之間切換,無需重新輸入任何內容,因此您可以並排比較表示。
為什麼 UTF-8 對於二進位轉換如此重要?
因為&引用;文字到二進位&引用;在您決定要轉換的編碼之前,它是沒有意義的,對於現代網路來說,答案幾乎總是 UTF-8。僅處理 ASCII 的工具似乎有效 - 它將愉快地轉換英文文本 - 然後在現實世界數據出現的那一刻就背叛您。
考慮重音"é"。在 UTF-8 中,它是兩個位元組, 11000011 10101001,或者 c3 a9 在十六進制中。將每個字元視為單一 ASCII 位元組的工具根本無法表示它;充其量它會丟棄該字符,最壞的情況是它會產生一個錯誤的位元組。現在考慮一個表情符號,它是 UTF-8 中的四個位元組。天真的工具完全破壞了這些。因為 二進制翻譯 是真正的 UTF-8 編解碼器,"咖啡館&報價;產生正確的五個字節,並將這五個字節貼上回來返回"咖啡館&報價;確切地。
這不是學術性的。任何接觸國際化內容、使用者產生的資料或任何帶有表情符號的內容的人都會立即點擊多位元組字元。如果你想要更深層的背景,那麼 Base64 編碼指南 涵蓋相關編碼的相同位元組級思維,理解其中一個會點擊另一個。簡短版本:位元組是通用的,但位元組和字元之間的對應是一種選擇,UTF-8 是 Web 所做的選擇。
二進位翻譯器獲得保留的常見用例
學習和教學電腦如何儲存文字
人們搜尋二進位翻譯器最常見的原因是理解這個概念。輸入您的名字並觀看它變成位元組會使抽象以講座無法做到的方式具體化。因為該工具顯示了確切的八位組,並允許您切換到十六進制和十進制,因此它還可以作為編碼和數字基數如何關聯的教具。學生可以看到 "A"是65, 01000001, 和 41 一次全部變成十六進制。
調試編碼問題
這就是我伸手去拿的地方。當字串損壞時 - 經典 "é 顯示為 ©" mojibake - 診斷它最快的方法是查看位元組。對斷斷續續的字串進行編碼可以揭示資料是雙重編碼、截斷的中間字元還是被採用錯誤編碼的系統損壞。看到原始位元組會變成模糊的"字元錯誤"進入特定的、可修復的診斷。
使用低階格式和協定
大量的技術工作涉及直接讀取位元組:網路封包、檔案頭、二進位協定和嵌入式系統都以十六進位和二進位表示。能夠快速將文字片段轉換為位元組表示,或將捕獲的十六進位字串解碼回可讀文本,可以節省持續的上下文切換。十六進位視圖尤其與十六進位編輯器和偵錯器顯示的內容一致。
謎題、CTF 和隱藏訊息
二進制和六進制是奪旗比賽、密室逃脫和極客謎題的主要內容。一串 1 和 0 是隱藏短訊息的常見方法,並且能夠通過連續或間隔輸入在四個基數中的任何一個中粘貼和解碼它,可以對這些短訊息進行短功。當謎題輸入有拼字錯誤或意想不到的分隔符號時,清晰的錯誤訊息會有所幫助。
為什麼要在瀏覽器中而不是在伺服器上轉換?
的 二進制翻譯 完全運行客戶端。您編碼的文字和解碼的位元組字串永遠不會離開您的機器,一旦頁面加載,工具就會繼續關閉您的連接。這比第一次出現更重要:人們轉換的字串通常是令牌、內部識別碼、用戶資料片段或捕獲的協定位元組 - 這正是您不應該貼上到隨機伺服器中的東西。瀏覽器內處理意味著沒有伺服器可以貼上。 線上工具中的資料隱私 指南為堅持這一點提供了更全面的理由。
二進位轉換也與一組相關的編碼任務並存。這 base64 編碼器/解碼器 處理用於透過純文字通道(例如電子郵件和資料 URL)移動二進位的編碼。這 URL 編碼器/解碼器 涵蓋查詢字串的百分比編碼。和 哈希產生器 當您需要指紋而不是可逆表示時,將文字轉換為固定長度的摘要。對於更廣泛的套件,我在構建時保持打開狀態 web 開發人員工具包 綜述是一個很好的起點。
問號
如何將文字轉換為二進位?
打開二進位翻譯器,選擇並引用;二進位&引用的文字;將基本設定保留為二進位,然後輸入文字。每個字元都編碼為其 UTF-8 位元組值並顯示為 8 位元組,因此 "A"變成 01000001。輸出在您鍵入時更新,只需單擊即可複製,並且可以切換到十六進位、十進位或八進位,而無需重新輸入任何內容。
如何將二進位轉換回文字?
選擇並引用;二進位到文字和引用;並貼上您的二進位。您可以用空格、逗號或換行符分隔字節,或貼上連續運行的一段位,只要總長度為 8 的倍數即可。該工具將位元分組為位元組,並將它們解碼為 UTF-8 以重建原始字符,如果長度錯誤或字符無效,則報告錯誤。
二進位翻譯器使用什麼字元編碼?
它使用 UTF-8,這是現代網路和大多數程式語言使用的編碼。 ASCII 字元採用一個字節,大多數重音字母採用兩個字節,許多腳本和所有表情符號採用三到四個字節。這意味著該工具正確處理的不僅僅是簡單的英語,這與僅映射 128 個 ASCII 字元的簡單工具不同。
也可以轉換為十六進位、十進位和八進位嗎?
是的。基數選擇器在二進位、十六進位、十進位和八進位之間切換輸出,解碼接受任何這些基數作為輸入。十六進位顯示每個位元組兩個字符,八進位三位數字,十進位顯示純 0 到 255 值,二進位顯示完整的八位。所有四個都代表相同的底層位元組。
為什麼贏得't我的二進位解碼?
兩個最常見的原因是位元長度不是八個的倍數,以及雜散字元對所選基數無效。該工具準確地告訴您哪個令牌無效或長度錯誤,因此您可以修復它。無效的位元組序列 UTF-8(例如被切斷的多位元組字元)也會被標記而不是解碼為垃圾。
二進位翻譯器是否支援表情符號和非英語文字?
是的。因為它透過 UTF-8 進行編碼,所以 ASCII 範圍之外的字元被表示為兩個、三個或四個位元組的正確序列,並將它們解碼重新組裝成原始字元。表情符號變成四個位元組並往返於同一表情符號,中文、阿拉伯語或重音拉丁文本的工作方式相同。
在這裡轉換敏感文字安全嗎?
是的。每次轉換都在瀏覽器內的 JavaScript 中運行,因此您輸入的任何內容都不會上傳、記錄或存儲,並且該工具在加載後無需互聯網連接即可繼續工作。您可以安全地轉換令牌、內部識別碼或私人訊息,而無需它們離開您的裝置。
此工具中 ASCII 和 UTF-8 有什麼不同?
ASCII 是一個涵蓋 128 個英文字元的 7 位元集,而 UTF-8 是一個可變長度編碼,包括所有 ASCII 以及所有其他 Unicode 字元。由於 UTF-8 是 ASCII 的超集,因此英文文字準確地產生 ASCII 表預測的字節,而重音字母、其他腳本和表情符號則獲得 ASCII 根本無法表示的正確多位元組序列。



