💡
原文中文,约6700字,阅读约需16分钟。
📝
内容提要
在 Windows 平台上,VSCode 的 C/C++ 扩展强制使用 UTF-8 编码,导致中文编码问题。终端默认使用 Big5 编码,但执行时输入输出变为 UTF-8,造成乱码。为避免错误,需确保输入输出编码一致。
🎯
关键要点
- 在 Windows 平台上,VSCode 的 C/C++ 扩展强制使用 UTF-8 编码,导致中文编码问题。
- 终端默认使用 Big5 编码,但执行时输入输出变为 UTF-8,造成乱码。
- C/C++ 扩展模块通过 WindowsDebugLauncher 改变终端的输入输出编码为 UTF-8。
- 如果以 Big5 编码发送字符,终端会将其误解为 UTF-8 编码,导致乱码。
- 直接在终端中执行编译好的文件时,输出正常,因为终端使用的是 Big5 编码。
- C/C++ 扩展模块执行后,终端的输出编码恢复为 Big5,但输入编码仍为 UTF-8。
- 可以通过简单程序确认输入文字的编码。
- 在 C/C++ 扩展模块执行时,输入输出编码一致可以正常显示,但单独执行时可能会出现乱码。
- 强制设置输出编码与输入编码一致可以解决乱码问题。
- C/C++ 扩展模块的设计可能导致初学者困惑,尤其是在 Windows 平台上。
❓
延伸问答
为什么在 Windows 上使用 VSCode 的 C/C++ 扩展会出现中文编码问题?
因为 C/C++ 扩展强制使用 UTF-8 编码,而终端默认使用 Big5 编码,导致输入输出编码不一致,从而出现乱码。
如何确认终端的输入输出编码?
可以通过编写简单的程序,使用 GetConsoleCP() 和 GetConsoleOutputCP() 函数来确认终端的输入输出编码。
在 VSCode 中如何解决 C/C++ 扩展的乱码问题?
可以通过强制设置输出编码与输入编码一致来解决乱码问题。
C/C++ 扩展模块如何影响终端的编码?
C/C++ 扩展模块通过 WindowsDebugLauncher 将终端的输入输出编码改为 UTF-8,但不恢复输入编码,导致可能出现乱码。
在终端中直接执行编译好的文件时,输出正常的原因是什么?
因为终端使用的是 Big5 编码,直接执行时不会受到 C/C++ 扩展强制使用 UTF-8 编码的影响。
初学者在使用 C/C++ 扩展时可能遇到什么困惑?
初学者可能会困惑于终端的输入输出编码与 C/C++ 扩展使用的编码不一致,导致乱码问题。
➡️