当前位置: 首页 > news >正文

在rust中执行命令行输出中文乱码解决办法

如果你使用标准的依赖库执行命令中包含中文的话, 就会发现中文乱码,如果你的输出中没有中文,就可以正常输出,因为windows的命令行默认使用的是gbk编码。。。。。

#[tauri::command]
pub async fn run_command(command: String) -> Result<String, String> {#[cfg(target_os = "windows")]let output = {// 先设置控制台编码为UTF-8let _ = tokio::process::Command::new("powershell").arg("-Command").arg("chcp 65001 | Out-Null").creation_flags(0x08000000).status().await;tokio::process::Command::new("powershell").arg("-Command").arg(&command).creation_flags(0x08000000).output().await.map_err(|e| e.to_string())?};#[cfg(not(target_os = "windows"))]let output = tokio::process::Command::new("sh").arg("-c").arg(&command).output().await.map_err(|e| e.to_string())?;if output.status.success() {print!("Command output: {}",String::from_utf8_lossy(&output.stdout));Ok(String::from_utf8_lossy(&output.stdout).to_string())} else {Err(String::from_utf8_lossy(&output.stderr).to_string())}
}

解决办法

使用标准的编码依赖库encoding_rs = "0.8"

完整代码:


#[tauri::command]
pub async fn run_command(command: String) -> Result<String, String> {#[cfg(target_os = "windows")]let output = tokio::process::Command::new("powershell").arg("-Command").arg(&command).creation_flags(0x08000000).output().await.map_err(|e| e.to_string())?;#[cfg(not(target_os = "windows"))]let output = tokio::process::Command::new("sh").arg("-c").arg(&command).output().await.map_err(|e| e.to_string())?;if output.status.success() {#[cfg(target_os = "windows")]{// 在Windows上尝试从GBK转换为UTF-8let (decoded, _, _) = GBK.decode(&output.stdout);Ok(decoded.into_owned())}#[cfg(not(target_os = "windows"))]{Ok(String::from_utf8_lossy(&output.stdout).to_string())}} else {#[cfg(target_os = "windows")]{let (decoded, _, _) = GBK.decode(&output.stderr);Err(decoded.into_owned())}#[cfg(not(target_os = "windows"))]{Err(String::from_utf8_lossy(&output.stderr).to_string())}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/246094.html

相关文章:

  • Systemd 服务配置完整指南
  • 注册bean和自动配置的原理、过程
  • 初识MySQL · 事务 · 下
  • 使用最新Dify1.4.1集成LM Studio的QWQ32B绘制工作流
  • HashMap真面目
  • ( github actions + workflow 03 ) 手动添加 token, 防止权限不够
  • 价格性价比高系列的高性能单片机MS32C001-C
  • 新加坡金融管理局责令未获许可加密货币公司于6月30日前退出,Bitget、Bybit考虑撤离
  • 大模型在关键社会领域的应用研究:金融、医疗和法律
  • 河南农担携手Gitee企业版:构建农业金融数字化研发新基建
  • Vue.js 从入门到实战:用户管理分页表格项目详解
  • 需求文档:边缘计算机软件重装与物联网登录应用开发
  • Fastadmin报错Unknown column ‘xxx.deletetime‘ in ‘where clause
  • Catch2 开源库介绍与使用指南
  • 微机原理与接口技术,期末习题(一)
  • 一[1]、ubuntu18.04 安装yolov8 + 实际测试
  • 【精华】双向心跳交互革命:AG-UI协议重塑AI Agent前端开发范式
  • [论文阅读] 人工智能 | ComfyUI-R1: Exploring Reasoning Models for Workflow Generation
  • Python 爬虫入门 Day 1 - 网络请求与网页结构基础
  • 力扣HOT100之技巧:75. 颜色分类
  • 三、DevEco Studio安装和HelloWorld应用
  • 鸿蒙期末总结
  • 纯血HarmonyOS ArKTS NETX 5 打造小游戏实践:狼人杀(介绍版(附源文件)
  • React16,17,18,19更新对比
  • springboot后端与鸿蒙的结合
  • 算法导论第一章:算法基础与排序艺术
  • 西电【信息与内容安全】课程期末复习笔记
  • 53. 最大的子数组和
  • 26-数据结构-顺序表1
  • go部分语法记录