答案1
如何停止自動更改編碼?
- 根據你自己的評論, 這自動猜測編碼已經離開。
事實上 VS Code 將您的檔案編碼為Windows-1252
(代碼頁 1252或者CP1252)
需要一些其他的解釋。
假設您有一個 VS Code 設定專門將您的 CSS 檔案解碼
為Windows-1252,我已經能夠非常準確地重現你的情況。
1
1. 重現整個場景
我用一個你的簡化版本style.css
,僅包含一行:
/* Ü */
讓 VS Code 使用編碼開啟文件Windows-1252
(使用自動猜測編碼離開),
我假設 VS Codesettings.json
包含以下程式碼/行:
2
"[css]": {"files.encoding": "windows1252"},
這樣的設定將使 VS Code 將所有.css
檔案編碼為
Windows-1252。
3
如果你下載style.css
,然後右鍵單擊它並
使用代碼打開,期望看到:
^ 點選可放大
你所看到的原因二 Windows-1252字元 – Ãœ
– 而不是單身的 UTF-8 Ü
性格,就是Windows-1252
讀取每個位元組作為單一字元 – 非 ASCII 字元
Ã
和œ
.
UTF-8另一方面使用兩個位元組讀取單一非 ASCII 字符,例如Ü
.
4
1.a.如何Ü
正確顯示
為了使德文字母Ü
正確顯示,您需要單擊:
使用編碼重新開啟 >UTF-8根據內容推測。
選擇重新開啟並編碼 不更改文件本身。
它改變了文件的方式顯示的在 VS Code 中 – 是怎樣的
已解碼。
1.b.你應該做什麼不是做
如果您點擊:
使用編碼保存>UTF-8根據內容推測。
這做更改文件 – 全部非-ASCII字元獲取 轉換的到其對應的 UTF-8 字元。如果儲存文件,則會儲存這些變更。
當您現在關閉並重新打開時style.css
,它會再次出現編碼的作為Windows-1252。
(為什麼?--因為這正是 VS Code"[css]": {"files.encoding": "windows1252"},
中的行settings.json
所告訴的內容!)
這就是您將看到的內容。
請注意Ãœ
與問題螢幕截圖中顯示的字元如何相同。
你現在看到的原因四字符而不是二和以前一樣。
- 這單身的 UTF-8字元Ã
(2 個位元組)顯示為
二Ã
解碼時的 字元(仍然是 2 個位元組)Windows-1252。
還有單身的UTF-8字元œ
顯示為兩個
Windows-1252人物Å“
。
這完成了我對您的場景的再現。
2. 如何修復損壞的文件
鑑於您想要顯示Ü
而不是損壞的Ãœ
,您需要:\
- 將文件轉換回來,
- 編碼為UTF-8,
- 關閉並重新開啟該文件。
1.將文件轉換回來
以下是如何將損壞的檔案轉換style.css
回原始狀態。
從上一個螢幕截圖開始,在狀態列中按一下視窗1252,
然後重新開啟並編碼,最後UTF-8。
期待看到Ãœ
。檔案仍然損壞,所以現在轉變它到Windows-1252
透過點擊 :
UTF-8 >節省使用編碼 > Windows 1252。
該文件現已轉換回其原始狀態。
剩下的就是解碼正確地(與UTF-8)。
2.使用UTF-8編碼
中settings.json
,刪除
"[css]": {"files.encoding": "windows1252"},
.
3. 關閉並重新開啟文件
關閉並重新開啟style.css
。檢查您是否看到UTF-8在狀態列中。期待看到:
耶!任務完成。
3. Notepad++ 中的編碼與轉換
為了更好地理解之間的區別解碼/編碼和
轉換一個文件,了解如何在另一個多功能文字編輯器中完成此操作可能會有所幫助:記事本++。
這個有用的答案用一張指導性圖片解釋了差異:
編碼在Notepad++中對應於重新開放帶編碼
在 VS Code 中,而
轉換在Notepad++中對應於
節省帶編碼在 VS 程式碼中。
4. ASCII、ANSI 和 UTF-8
一些事實可能有助於理解什麼ASCII, 美國國家標準學會, 和UTF-8是。
ASCII 字元僅使用一個位元組。
或者,如果您願意,它使用一個位元組的八位元中的七位元——最高有效位元始終為零。
這對應於十進制數的 0-127、十六進制數的 0x00-0x7F
以及位的 0000 0000 - 0111 1111。ANSI/Windows-1252 和 UTF-8 都將 ASCII 字元編碼為 ASCII 字元本身。
例如,字元(字母)k
是純ASCII字元。這是一位元組(八位元)十進位數為 107,十六進位數為 0x6B,位元為 0110 1011
。k
不是一個 ANSI 字符,也不是不是一個 UTF-8 字元。 – 兩者皆有!
如果文字檔案包含僅有的ASCII 字符,則 ANSI 和 UTF-8 編碼一致。
你不能區分其中一個。這樣的文件是兩個都美國國家標準學會和UTF-8 編碼。 5
^ 點選可放大
上半部Windows-1252上表對應數字0-127,下半部對應數字128-255。後者是非 ASCII美國國家標準學會的字元Windows-1252。
下圖取自
UTF-8 和 ASCII 字元圖表,
並顯示所有這些Windows-1252再次出現字符,編號為 128-255。
如果你想知道有多少位元組(和什麼位元組)UTF-8 字元使用,嘗試這個線上工具。
參考
- 樣式.css |只含有
/* Ü */
- 貼文引用了 Microsoft 的 Cathy Wissink
- 每個非 ASCII UTF-8 字元使用至少兩個(最多四個)位元組
- 美國資訊交換標準代碼表
- 回答什麼是 ANSI |第 3 節中的表
- Unicode 轉換格式 - 8 位元解釋
- Windows-1252 (CP-1252) 編碼表
- 記事本++ |下載頁面
- 如何在 Notepad++ 中將 ANSI 轉換為 UTF-8
- UTF-8 和 ASCII 字元圖表
- 轉換器,UTF-8 到位元組(十六進位)
1
我認為我所呈現的場景合理地描述了可能
已經發生了。
當然,我無法確切知道是什麼原因導致了你的情況。
2
要打開settings.json
,請按Ctrl+ ,(逗號),然後按一下開啟設定右上角的圖示:
在 macOS 上,使用⌘而不是Ctrl.
3
用於表示 Windows 代碼頁的術語「ANSI」是歷史參考 [...]。
微軟仍然使用西歐 ANSI可互換地與
Windows-1252,例如在其notepad.exe
文字編輯器中,通常位於C:\WINDOWS\System32
.這也是我遵循的慣例。也可以看看這個答案。
4 更準確地說,每個非 ASCII UTF-8 字元使用至少 兩個(最多四個)位元組。
5 假設您有一個文字文件,其中包含僅有的純 ASCII 字元。如果您在某些文字編輯器中開啟該文件,且狀態列顯示 ANSI,這並不表示該文件是不是UTF-8 編碼。這只是意味著該文字編輯器使用 ANSI 作為其預設 編碼。如果預設編碼是UTF-8,編輯器將在狀態列中顯示UTF-8對於同一個文件。