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

博客主页: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.hqwc.cn/news/288585.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】【12.20】2828.判别首字母缩略词

🔥博客主页: A_SHOWY🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.题目链接 2828. 判别首字母缩略词https://leetcode.cn/problems/check-if-a-string-is-an-acronym-of-words/ 2.题目描述 今天…

【动态规划】08路径问题_下降路径最小和_C++(medium)

题目链接:leetcode下降路径最小和 目录 题目解析: 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析: 题目让我们求通过 matrix 的下降路径 的 最小和 由题可得: 在下一行选择的元…

Python 操作mysql实现事务处理

一、应用场景 Python项目对MySQL数据库进行增、删、改操作时,有时会出现执行sql异常的情况。在批量提交数据的时候,如果其中一个事务提交错误,往往导致预期的整个数据链不完整。 例如银行转账数据,用户A向用户B转账: …

Navicat16的下载与安装

Navicat16的下载与安装 1、官网下载地址:https://www.navicat.com.cn/download/navicat-premium 当然有的朋友在官网下载比较慢,我也为大家准备好了百度网盘链接 链接:https://pan.baidu.com/s/1dUcTSHr3761Oayh0-WfolA?pwdwfpl 提取码&am…

【Java】常用的时间类API

目录 Date(时间和日期) SimpleDateFormat(解析字符串时间成为时间对象) Calendar(系统此刻时间对应的日历) LocalDate(年、月、日) LocalTime(时、分、秒) LocalDateTime(年、月、日、时、分、秒…

LeetCode 每日一题 Day 17 || 二分

1901. 寻找峰值 II 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat ,其中任意两个相邻格子的值都 不相同 。找出 任意一个 峰值 mat[i][j] 并 返回其位置 [i,j] 。 你可以假设整个矩阵周…

vue 如何实现拖动:vue-draggable

vue-draggable 官方文档:传送门 特点: 支持触摸设备(如vue项目的移动端开发Quasar)支持拖拽和选择文本支持不同列表之间的拖拽视图模型的同步刷新与vue2的过渡动画(transition-group)兼容有很多监听函数…

Python MySQL数据库连接实现增删改查

一、应用场景 python项目连接MySQL数据库时,需要第三方库的支持。这篇文章使用的是PyMySQL库,适用于python3.x。 二、安装 pip install PyMySQL三、使用方法 1.导入模块 import pymysql2.连接数据库 db pymysql.connect(hostlocalhost,usercode_s…

甄选的董宇辉,颠覆新东方?

董宇辉又被推向浪尖。 一年前,新东方老师董宇辉出现在东方甄选主播间,用边带货边教英文的方式爆火出圈,成为了东方甄选的活招牌。一年后,一条常规宣发物料引发一场巨大的舆情风波,董宇辉“小作文”事件如闹剧般展开&a…

Java研学-Tomcat服务器

一 Web资源 1 概述 浏览器网页上看到的所有内容都称为web资源,比如文字,图片,音频,视频,链接等等内容。 2 Web资源分类 分类概述使用的技术静态资源静态资源是相对于动态资源而言,是指没有后台数据库、不…

3ds Max渲染贴图丢失?这样操作就能搞定!

当你在使用3ds Max进行渲染时,有时候会遇到贴图丢失的问题,导致模型无法正常显示。这可能是因为你在导入模型或添加贴图时出现了一些错误。不过不用担心,接下来我将向你解释这个问题可能出现的几种原因,同时提供有效的解决方案。 …

视觉问答学习(对比学习-3D点云)

1、基于对比学习的方法 自监督学习,不需要人工标注的类别标签信息,而是利用数据本身提供的监督信息来学习样本数据的特征表达,并用于下游任务。在视觉语言表示学习中,通过对比学习实现图像-文本对齐,这种对齐策略能够…