当前位置: 首页 > 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.xdnf.cn/news/999001.html

相关文章:

  • android:foregroundServiceType详解
  • 亚马逊云服务器(AWS)会限制用户使用吗?深度解读AWS资源政策
  • 用idea进行数据同步
  • List ToMap优化优化再优化到极致
  • 成功解决 ValueError: Unable to find resource t64.exe in package pip._vendor.distlib
  • 51la无法统计IP?悟空统计精准IP归属地
  • 模板字符串使用点击事件【VUE3】
  • 使用Ollama+open-webui搭建本地AI模型
  • 榕壹云信用租赁系统:免押金全品类租赁解决方案,区块链+多因子认证赋能
  • 财政部长斯科特·贝森特预测,美元支持的稳定币将达到 2 万亿美元
  • [C++11] : 谈谈包装器和lambda表达式,仿函数,bind的坑
  • 分布式MQTT客户端看门狗机制设计与实现
  • ShardingSphere解析:分布式数据库中间件的分片设计与事务管理实践
  • react实现axios 的简单封装
  • 单链表经典算法
  • 【鸿蒙开发】组件动态创建
  • Linux检验库是否安装成功
  • 多线程(4)
  • 【大模型】实践之1:macOS一键部署本地大模型
  • std::make_shared简化智能指针 `std::shared_ptr` 的创建过程,并提高性能(减少内存分配次数,提高缓存命中率)
  • Tomcat 和 Spring MVC
  • SQL进阶之旅 Day 29:NoSQL结合使用策略
  • docker-自动启动java 包
  • 使用VSCode开发FastAPI指南
  • Python 实现 Web 请求与响应
  • VSCode - Trae 插件关闭弹出框代码补全
  • 【C++学习笔记】 std::atomic 拷贝构造错误解析
  • docker-compose容器单机编排
  • el-select+el-tree实现树形下拉选择
  • tabs页签嵌套表格,切换表格保存数据不变并回勾