问题描述:
现象
个人在平时比较倾向使用 “UTF-8” 编码格式
所以在VSCode中,对于设置的默认编码选项(“files.encoding”)的值也是 “UTF-8”。
但是如果使用 ”UTF-8“ 编码格式保存的Windows 的批处理脚本(“.bat”,“.cmd”),如果批处理脚本如果包含中文字符,则在实际运行过程中会出现一些问题。
主要有两种现象:中文字符显示乱码和部分注释会被解读为命令。
这里主要是因为在我的操作系统环境下,cmd的默认编码格式并不是(且不兼容)“UTF-8” 格式。
(并且不能自动检测)
(注:这里cmd的系统默认代码页为”936“,对应编码 ”GB2312“)
参考示例
代码(保存为 “UTF-8” 格式):
rem 你,好
rem 你好
:: 你,好
:: 你好
echo 你,好
echo 你好
有结果:
而即便提前使用”chcp“命令切换代码页为 ”65001“(UTF-8)仍然会存在问题:
(特别是在使用标点符号时)
实践下来发现如果希望拥有较好的批处理使用体验,还是要使用默认的代码页 “936” 。
所以有了希望单独设置批处理脚本使用 “GB2312” 编码格式的需求。
相关方案
这里的最初计划是单独设置 “.cmd” 文件使用 “GB2312” 编码格式,但是发现VSCode没有提供按文件扩展名指定编码格式的方法。
不过VSCode提供了根据扩展名设置对应语言的方法,以此为思路查找发现提供了一个可以为特定语言设置单独的设置的方式,参考:
VScode如何根据不同文件类型设置诸如tab的长度、ruler位置等选项? - 知乎https://www.zhihu.com/question/49624784这里有位答主介绍了一种可以为不同语言进行单独设置的方式,更具体的可以参考来自官方文档的说明:
Visual Studio Code User and Workspace SettingsHow to modify Visual Studio Code User and Workspace Settings.https://code.visualstudio.com/docs/getstarted/settings#_language-specific-editor-settings 对于我这里的情况,参考如下链接中说明的对应批处理语言(“batch”)的特定名称:
Visual Studio Code language identifiershttps://code.visualstudio.com/docs/languages/identifiers发现批处理语言对应“bat”,所以在 “settings.json” 中添加设置如下:
"[bat]": {
"files.encoding": "gb2312",
},
完成后重新打开VSCode, 此时打开 “.bat” 或 “.cmd”文件时发现默认格式均为 “gb2312”,而其他文件都仍然是 “UTF-8” ,问题解决。
其它
VSCode环境
版本: 1.94.2 (user setup)
提交: 384ff7382de624fb94dbaf6da11977bba1ecd427
日期: 2024-10-09T16:08:44.566Z
Electron: 30.5.1
ElectronBuildId: 10262041
Chromium: 124.0.6367.243
Node.js: 20.16.0
V8: 12.4.254.20-electron.0
OS: Windows_NT x64 10.0.22631