You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python subprocess执行netsh wlan命令时遇UnicodeDecodeError的解决求助

解决Windows下subprocess执行netsh命令的编码错误问题

遇到的UnicodeDecodeError是因为Windows命令行(cmd)的默认编码不是UTF-8,而是GBK(对应代码页CP936),netsh命令的输出用这个编码,用UTF-8解码自然会失败。下面是几个可行的解决办法:

方法一:指定正确的编码(最直接)

直接将subprocess.run的encoding参数设为gbk或cp936(两者等价):

import subprocess

command = 'netsh wlan show profiles'
network_list = subprocess.run(command, shell=True, capture_output=True, text=True, encoding='gbk')
networks = network_list.stdout
print(networks)

方法二:捕获字节输出后容错解码

如果不确定编码,先获取原始字节数据,再尝试解码,遇到错误时忽略或替换无效字符:

import subprocess

command = 'netsh wlan show profiles'
network_list = subprocess.run(command, shell=True, capture_output=True)
# 优先尝试GBK解码,失败则用UTF-8忽略错误字符
try:
    networks = network_list.stdout.decode('gbk')
except UnicodeDecodeError:
    networks = network_list.stdout.decode('utf-8', errors='ignore')
print(networks)

方法三:先切换命令行编码为UTF-8

通过chcp 65001将控制台编码切换为UTF-8,再执行netsh命令,之后就能用UTF-8解码:

import subprocess

command = 'chcp 65001 && netsh wlan show profiles'
network_list = subprocess.run(command, shell=True, capture_output=True, text=True, encoding='utf-8')
networks = network_list.stdout
# 移除开头的编码切换提示行
networks = '\n'.join(line for line in networks.split('\n') if not line.startswith('Active code page:'))
print(networks)

注:你之前尝试的utf-16不适用,因为它是双字节编码,而netsh输出是单字节的GBK编码,强行用UTF-16解码只会导致更多错误。

内容的提问来源于stack exchange,提问作者Selim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:22:15