VS Code集成终端UTF-8输入异常问题求助
解决VS Code集成终端中MSVC程序fgets读取UTF-8输入异常的问题
问题根源
VS Code集成终端与独立PowerShell 7在标准输入的初始化逻辑上存在差异,即使编码设置为UTF-8(65001),MSVC运行时也可能无法正确读取输入缓冲区的内容,导致fgets返回空值。
解决方案
1. 强制设置标准输入为UTF-8文本模式
MSVC默认的输入模式可能不兼容VS Code集成终端的UTF-8输入处理,在代码中添加模式设置语句,强制将标准输入切换为UTF-8文本模式:
#include <locale.h> #include <stdio.h> #include <fcntl.h> #include <sys/stat.h> int main(){ char *charset = setlocale(LC_ALL, ".UTF-8"); // 配置标准输入为UTF-8文本模式 _setmode(_fileno(stdin), _O_U8TEXT); char buffer[64]; puts("Enter something..."); fgets(buffer, sizeof buffer, stdin); printf("charset: %s\ninput: %s\n", charset, buffer); }
2. 调整VS Code集成终端的PowerShell 7启动参数
打开VS Code设置,搜索terminal.integrated.profiles.windows,修改PowerShell 7的配置,确保终端启动时完成编码初始化:
"terminal.integrated.profiles.windows": { "PowerShell 7": { "source": "PowerShell", "args": ["-Command", "chcp 65001"] } }
3. 确认VS Code终端编码设置
检查terminal.integrated.encoding选项,确保其值设置为utf8(可通过设置搜索框直接查找该选项)。
补充说明
独立PowerShell 7启动时会完成完整的终端环境初始化,包括编码和输入模式的配置,因此程序能正常运行;而VS Code集成终端的启动流程相对简化,导致MSVC运行时无法正确识别输入状态,通过上述调整可以补全缺失的初始化步骤,解决输入读取异常问题。
内容的提问来源于stack exchange,提问作者kaan
相关产品推荐
相关产品推荐

