信创之国产浪潮电脑+linux统信UOS操作系统体验6:Python中文处理报错 (unicode error) ‘utf-8‘ codec can‘t decode及中文字符集处理

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython

一、引言

在《信创之国产浪潮电脑+统信UOS操作系统体验4:visual studio code中怎么显示中文》介绍了在vscode编辑器中怎么正常显示中文,最近老猿在vscode中编辑Python文件,在编辑器中正常显示中文,但执行时报错的问题,可见字符集确实是国产化操作系统、linux系统+vscode编辑并执行含中文字符处理的一个关键问题,下面来整体介绍一下相关情况。

二、问题产生过程及解决办法

  1. 在vscode中新建一个hello.py文件

文件内容如下:

print("hello,world!")
print("你好!")
  1. 在终端中执行指令python ./hello.py
    在终端中执行指令python ./hello.py,报错如下:
SyntaxError: Non-UTF-8 code starting with '\xc4' in file ./hello.py on line 3, 
but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

截图如下:
在这里插入图片描述
3. 调整代码中的字符集声明为utf-8
在代码第一行增加# -*- coding: utf-8 -*-,再在终端中执行,报错信息变为:

SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte

将代码第一行字符集改为GBK,全代码如下:

# -*- coding: GBK -*-

print("hello,world!")
print("你好!")

执行正常执行,如此可以确认是代码文件的字符集与文件中声明的字符集不匹配导致。从vscode的状态栏右下角可以看到字符集为GBK,如上图绿色箭头所示,也就是代码文件是GBK字符集的,那么在带中的声明必须与此匹配。

三、系统化的解决办法

上面出现问题到解决,是在python文件中声明字符集类型来解决的,但有时由于项目要求必须以特定字符集如UTF-8来执行,上述解决办法行不通,最好的办法就是项目要求的字符集和文件的字符集在开始时就保持一致,这要区分新建文件和存量文件来进行不同的处理。

3.1、新建文件

在vscode中,可以通过《信创之国产浪潮电脑+统信UOS操作系统体验4:visual studio code中怎么显示中文》介绍的首选项设置字符集方法,将新建文档的字符集指定为特定字符集,下图是设置为GBK字符集:
在这里插入图片描述
可以将其设置改为UTF-8:
在这里插入图片描述
如果不是vscode的编辑器,则保存文件的字符集需要不同的方式来设置,下图是统信操作下图自带文本编辑器的设置方法(文件保存时设置字符集):
在这里插入图片描述

3.2、存量文件字符集的变更

如果已有一个存量文件的字符集如GBK,要变更成另一个字符集,则需要另外的方法。

3.2.1、查看文件的字符集

可以通过vscode打开文件查看字符集,也可以通过linux的file -i指令查看文件的字符集信息,例如:
在这里插入图片描述
可以看到hello.py字符集是iso-8859-1,但是在vscode内打开变成了GBK字符集,应该是vscode自动做了转换,具体机制老猿还没研究清楚。

3.2.2、转换文件的字符集

转换字符集有个方法:

  1. 新建一个文件,将要转换文件的内容直接拷贝到新的文件中,然后将新文件以目标字符集方式保存,具体可以参考前面介绍的新建文件字符集设定方法;
  2. 用linux指令iconv,指令格式为:iconv -f 源文件字符集 -t 目标文件字符集 源文件名 > 目标文件名,但这个方法使用上需要注意源文件字符集的取值,具体看下面的案例。
3.2.3、用iconv指令转换文件字符集的案例

用上面介绍的hello.py这个文本文件,可以看到在vscode中显示字符集为GBK,在file -i指令中显示为iso-8859-1,那么转换用哪个字符集呢?我们实际验证一下:

  1. 用iso-8859-1字符集进行转换:iconv -f iso-8859-1 -t UTF-8 hello.py >h.py,转换后打开文件,相关截图如下:
    在这里插入图片描述
    可以看到是乱码。
  2. 用GBK字符集进行转换:iconv -f GBK -t UTF-8 hello.py >h.py,转换后打开文件,相关截图如下:
    在这里插入图片描述
    显示是正常的,因此以vscode显示字符集进行转换才是对的,但注意上面的文件内容第一行的GBK同时要调整为UTF-8,否则执行时会存在乱码输出。

小结

本文介绍了一个在统信linux操作系统UOS下执行Python文件输出中文报错的案例,从查看文件字符集编码、新建文件设定字符集、python文件声明字符集以及存量文件调整文件字符集编码的角度比较全面的介绍了问题产生的原因、解决办法,代码文件的字符集与文件中声明的字符集不匹配是导致这个问题的根源,解决办法就是通过调整文件字符集、py文件声明文件字符集保持一致。

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多关于信创之国产浪潮电脑+统信UOS操作系统体验的内容请参考专栏《国产信创之光》的其他文章。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
UOS中,可以通过systemctl命令设置服务的开机自启。要开启SSH服务的开机自启动,你可以执行以下步骤: 1. 打开终端并以root用户身份登录。 2. 运行命令systemctl enable ssh来启用ssh服务的开机自启动。 3. 编辑/etc/ssh/sshd_config文件,找到PermitRootLogin行,并去掉注释,并将后面的prohibit-password改为yes,以允许root用户登录。 4. 重启sshd服务,可以运行命令service sshd restart来重启ssh服务。 这样,在UOS启动时,SSH服务将自动启动,并允许root用户通过SSH远程登录。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [UOS](https://blog.csdn.net/eJohnLv/article/details/126640535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [操作系统--UOS桌面版(登录与激活:直接登录、远程登录、锁屏、电源管理、激活)](https://blog.csdn.net/hjx020/article/details/120268909)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值