为什么我的Windows terminal运行的程序有乱码
c语言吧
全部回复
仅看楼主
level 5
怒人水瓶
楼主
2024年12月13日 10点12分
1
level 5
怒人水瓶
楼主
@GTA小鸡
鸡哥帮忙看一下
,正常来说utf8.exe这个能正常显示中文,gbk那个才是显示乱码
2024年12月13日 10点12分
2
level 5
怒人水瓶
楼主
是不是Windows terminal有bug哇
2024年12月13日 10点12分
3
level 5
怒人水瓶
楼主
这就是符合预期
2024年12月13日 11点12分
5
吧务
level 14
GTA小鸡
你用的是cmd还是powershell?
2024年12月13日 11点12分
6
怒人水瓶
@GTA小鸡
我用的win10,装的Windows terminal,用的它里面的powershell
2024年12月13日 11点12分
怒人水瓶
@GTA小鸡
单独用cmd或powershell试,是正常的
2024年12月13日 11点12分
吧务
level 14
GTA小鸡
chcp是cmd查看切换代码页的命令,powershell查看代码页的命令是:
[Console]::Out
powershell切换代码页为utf-8的命令是:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
2024年12月13日 11点12分
7
怒人水瓶
太强了,鸡哥,测试图在楼下
2024年12月13日 11点12分
AMDPENTIUM
话说代码页的概念在支持utf8的程序里没有吧?
2024年12月13日 16点12分
AMDPENTIUM
不是很理解代码页为什么影响终端的字符显示,我的理解是cmd/pwsh启动exe可执行文件并将可执行文件的stdio连接到终端,具体怎么把stdio的字节解码为字符应该是终端做的事,所以编码应该在终端模拟器里设置,但为什么调整cmd/pwsh的代码页设置会改变终端上显示的字符?
2024年12月13日 16点12分
GTA小鸡
@AMDPENTIUM
你的程序是和shell打交道,而不是直接和终端程序打交道,程序的stdout输出到powershell,再由powershell转发到终端,所以powershell和终端都必须知道当前使用的字符集。举个例子,如果powershell不知道正确的字符集,那么它就无法正确处理管道(程序1 | 程序2)的字符。
2024年12月14日 02点12分
level 5
怒人水瓶
楼主
2024年12月13日 11点12分
9
level 5
怒人水瓶
楼主
永久解决这个问题
2024年12月13日 11点12分
10
吧务
level 15
▫XeO2▫
我刚才果然是说错了,cmd的行为应该和2楼描述的一致,看来是Power Shell不一样。
这是cmd + Windows Terminal
这是cmd + conhost
2024年12月13日 11点12分
11
1