故障排查:shell脚本输出乱码

news2024/11/15 11:15:11

博客主页:https://tomcat.blog.csdn.net
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注💖点赞👍收藏⭐留言💬
家乡

目录

  • 故障详情
  • 故障原因
  • 解决方法
  • iconv命令介绍

故障详情

最近的工作中遇到一个问题,有测试同事反馈,我的shell脚本运行有报错。如下图所示,测试结果是左侧所示,期待结果是右侧。
请添加图片描述

故障原因

我一看,我发现这命名是乱码,不是报错。打开shell脚本发现了报错来自如下一行代码:

resultStr=$("$python_bin" "$admin_dir/get_manipulator.py" "$@" )
# other code
echo "$resultStr"

我尝试单独运行"$python_bin" "$admin_dir/get_manipulator.py" "$@"是不会乱码的,但是先捕捉,再打印,就会遇到问题。
看来是shell脚本和python的字符编码不一致导致的。

解决方法

我通过iconv命令实现字符编码的转化。解决了这问题。具体代码如下所示:

resultStr=$("$python_bin" "$admin_dir/get_manipulator.py" "$@" | iconv -f GBK -t UTF-8)
# other code
echo "$resultStr"

iconv命令介绍

iconv是GUN软件libiconv中的一个命令,用以将文本从一种编码转换为另一种编码。更准确地说,它从−f选项的编码转换为−t选项的编码。这两种编码中的任何一种默认为当前区域设置的编码。依次读取和转换所有输入文件;如果没有给定inputfile,则使用标准输入。转换后的文本将打印为标准输出。

不是所有的Linux计算机都默认安装了libiconv。如果没有安装,可以访问官网 https://www.gnu.org/software/libiconv/ 进行下载。

以下是常用的参数:

-l 列出支持的编码。
-f 指定输入的编码。
-t 指定输出的编码。
-c 当给出此选项时,无法转换的字符将被静默丢弃,而不是导致转换错误。
-s 静默模式,不输出报错和警告。
-o 输出到指定文件。
–verbose 打印进度信息
–unicode−subst=formatstring 当提供此选项时,无法在目标编码中表示的 Unicode 字符将替换为占位符字符串formatstring。
–byte−subst=formatstring 当给出此选项时,输入中在源编码中无效的字节将替换为从给定格式字符串构造的占位符字符串formatstring。
–widechar−subst=formatstring 当给出此选项时,输入中在源编码中无效的宽字符将替换为占位符字符串formatstring。

示例命令如下:

# 列出了支持的编码
iconv -l 

# 转换gbk编码文件为utf-8编码文件
iconv  -f gbk -t utf-8 gbk.html > utf8.html
iconv  -f gbk -t utf-8 gbk.html -o utf8.html

如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python Opencv实践 - 手势音量控制

本文基于前面的手部跟踪功能做一个手势音量控制功能,代码用到了前面手部跟踪封装的HandDetector.这篇文章在这里: Python Opencv实践 - 手部跟踪-CSDN博客文章浏览阅读626次,点赞11次,收藏7次。使用mediapipe库做手部的实时跟踪&…

Linux静态ip

Linux静态ip Ⅰ、修改静态ip Ⅰ、修改静态ip 修改静态ip必须是root用户 su root //切换root用户 ip a //查看修改前的动态ipvi /etc/sysconfig/network-scripts/ifcfg-ens33 //打开网卡配置文件,修改一处,新增四处 BOOTPROTO&quo…

[Realtek sdk-3.4.14b]RTL8197FH-VG+RTL8812F WiFi使用功率限制功能使用说明

sdk说明 ** Gateway/AP firmware v3.4.14b – Aug 26, 2019**  Wireless LAN driver changes as:  Refine WiFi Stability and Performance  Add 8812F MU-MIMO  Add 97G/8812F multiple mac-clone  Add 97G 2T3R antenna diversity  Fix 97G/8812F/8814B MP issu…

智能优化算法应用:基于人工水母算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于人工水母算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于人工水母算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工水母算法4.实验参数设定5.算法结果6.…

MongoDB的原子操作findAndModify和findOneAndUpdate

本文主要介绍MongoDB的原子操作findAndModify和findOneAndUpdate。 目录 MongoDB的原子操作一、findAndModify二、findOneAndUpdate MongoDB的原子操作 MongoDB的原子操作指的是在单个操作中对数据库的数据进行读取和修改,并确保操作是原子的,即要么完全…

轮滑加盟培训机构管理系统源码开发方案

一、项目背景与目标 (一)项目背景 随着轮滑运动的普及和市场需求的增加,轮滑加盟培训机构逐渐兴起。这些机构面临着学员管理、课程排班、教师管理等多方面的挑战。为了提高管理效率和服务质量,需要开发一套专门针对轮滑加盟培训…

[总线仲裁]

目录 一. 集中仲裁方式1.1 链式查询方式1.2 计数器查询方式1.3 独立请求方式 二. 分布式仲裁方式 总线仲裁是为了解决多个设备争用总线这个问题 \quad 一. 集中仲裁方式 \quad 集中仲裁方式: 就像是霸道总裁来决定谁先获得总线控制权 分布仲裁方式: 商量着谁先获得总线控制权 …

SQL学习笔记+MySQL+SQLyog工具教程

文章目录 1、前言2、SQL基本语言及其操作2.1、CREATE TABLE – 创建表2.2、DROP TABLE – 删除表2.3、INSERT – 插入数据2.4、SELECT – 查询数据2.5、SELECTDISTINCT – 去除重复值后查询数据2.6、SELECTWHERE – 条件过滤2.7、AND & OR – 运算符2.8、ORDER BY – 排序2…

Linux:终端定时自动注销

这样防止了,当我们临时离开电脑这个空隙,被坏蛋给趁虚而入 定几十秒或者分钟,如果这个时间段没有输入东西那么就会自动退出 全局生效 这个系统中的所有用户生效 vim /etc/profile在末尾加入TMOUT10 TMOUT10 这个就是10 秒,按…

Panoply查看nc文件的时间维

打开的是全球灌溉农田灌溉用水量遥感估算数据集(2011-2018),该文件以nc格式储存。nc格式文件就是一个多维的数据库。经纬度占了两维,可能还有时间维度,就是时空谱。 双击打开刚打开时只能看到2018年1月的灌溉数据 打…

用23种设计模式打造一个cocos creator的游戏框架----(二十二)原型模式

1、模式标准 模式名称:原型模式 模式分类:创建型 模式意图:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象 结构图: 适用于: 1、当一个系统应该独立于它的产品创建、构成和表示时 2、…

Kubernetes 架构原则和对象设计

什么是 Kubernetes Kubernetes 是谷歌开源的容器集群管理系统 • 基于容器的应用部署、维护和滚动升级; • 负载均衡和服务发现; • 跨机器和跨地区的集群调度; • 自动伸缩; • 无状态服务和有状态服务; • 插件机制…

实验:使用ADC读取烟雾传感器的值

CubeMX 配置 3.3/4096 * smoke_value 这个表达式的含义是将ADC的原始数值 smoke_valuesmoke_value 转换成相应的电压值,假设ADC的范围是0到4095,电源电压是3.3V。这是一个将ADC的数字值映射到实际电压值的线性转换。 具体来说: 3.33.3 是电…

广东建筑模板价格一览表

在建筑行业,合适的建筑模板是确保工程顺利进行的关键材料之一。在选择建筑模板时,除了质量、材质等因素外,价格也是一个重要的考虑因素。本文将提供一个广东建筑模板的价格一览表,以供业内人士参考。需要注意的是,以下…

C++ Qt开发:QItemDelegate自定义代理组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStyledItemDelegate自定义代理组件的常用方法…

MyBatis-Plus如何 关闭SQL日志打印

前段时间公司的同事都过来问我,hua哥公司的项目出问题了,关闭不了打印sql日记,项目用宝塔自己部署的,磁盘满了才发现大量的打印sql日记,他们百度过都按照网上的配置修改过不起作用,而且在调试时候也及为不方…

【计算机四级(网络工程师)笔记】操作系统概论

目录 一、OS的概念 1.1OS的定义 1.2OS的特征 1.2.1并发性 1.2.2共享性 1.2.3随机性 1.3研究OS的观点 1.3.1软件的观点 1.3.2资源管理器的观点 1.3.3进程的观点 1.3.4虚拟机的观点 1.3.5服务提供者的观点 二、OS的分类 2.1批处理操作系统 2.2分时操作系统 2.3实时操作系统 2.4嵌…

watermark-dom 水印不显示

引入watermark-dom 之后,代码也按照文档写好了,也有水印的元素了,但是就是不显示水印 查看元素,发现shadow-root 里面啥也没有 查看源代码发现 shadowRoot 添加水印的这行代码根本没执行 接着往上查,发现没有进入这个…

Java发起SOAP请求代码参考

目录 Java发起SOAP请求代码参考 代码1.组装参数2.加密参数3.发起连接4.解析返回数据 参考 文章所属专区 超链接 代码 1.组装参数 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&qu…

Java集合转int数组

集合通过toArray()方法进行转换为数组&#xff0c;可以转换成为指定类型的数组&#xff0c; 【但是】这些类型都必须是object类型的子类&#xff0c;基本类型不可以。 可以通过stream流处理&#xff1a; Set<Integer> set new HashSet<>(); int[] result interSet…