答案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 Code 中。
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。
因此,说 ASCII 字符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 字符使用,尝试这个在线工具。
参考
- style.css | 仅包含
/* Ü */
- 文章引用了微软 Cathy Wissink 的话
- 每个非 ASCII UTF-8 字符使用至少两个(最多四个)字节
- 美国信息交换标准代码表
- 回答 ANSI 是什么 | 第 3 节中的表格
- Unicode 转换格式 - 8 位解释
- Windows-1252(CP-1252)编码表
- Notepad++ | 下载页面
- 如何在 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对于同一个文件。