Windows 上 VSCode 的 C/C++ 延伸模組處理編碼的問題

Windows 上 VSCode 的 C/C++ 延伸模組處理編碼的問題

💡 原文中文,约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++ 扩展使用的编码不一致,导致乱码问题。

➡️

继续阅读