python2和python3及ubuntu终端的编码问题

博客主要讲述在Ubuntu系统的shell脚本中调用Python脚本时,因系统语言编码设置问题导致无法正常输出、阻塞报错的情况。给出修改环境变量或脚本标准输出编码方式的解决方法,还拓展了Python2.7的编码问题及转换方法,指出Python3一般无此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一:

在shell脚本中调用Python脚本时可能无法正常输出的问题
在ubuntu系统的shell脚本中调用python脚本时一直阻塞无法继续执行,ctrl + c结束进程后报错如下

error:  'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

错误分析:

该错误时原因是由于系统的语言编码设置,导致无法显示中文。

  • 解决方法1 可在运行脚本前,修改环境变量LANG或者PYTHONIOENCODING
export LANG="en_US.UTF-8"
或者
export PYTHONIOENCODING='utf-8'
  • 解决方法2 也可在python脚本中修改标准输出编码方式
import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

拓展一: python的编码问题

在python2.7脚本默认编码是ascii码,该编码方式无法识别中文,因此一般会在脚本开头改变编码方式,如下:

#coding=utf-8
或者
## -*- coding: utf-8 -*-

将脚本的编码方式是改为utf-8,与python3一致。

  • 在计算机内存中,统一使用unicode编码,当需要保存到硬盘或者需要传输时,转换成utf-8编码,以此来节省存储空间。

  • Unicode编码格式:\u0000
    二进制编码格式(utf8, gbk):\x00\x00

  • 在python2.7中存在字符串,一种是unicode类型的:如s = u’中文’,一种是str类型: 如s = ‘中文’。Unicode类型的字符串可由str类型解码得来decode(),Unicode类型的字符串也可编码成str类型encode()。

在python2.7中做编码转换时通常需要以Unicode类型字符串为中介即:

str.decode('原编码格式').encode('目标编码格式')

decode():得到Unicode类型的字符串,
encode():将Unicode类型的字符串转换成其他编码。

python3中一般不存在这种问题。

Ubuntu系统中,处理Geditvim编辑器中文乱码的问题,关键在于正确设置系统环境变量以及编辑器的编码配置。首先,我们需要确认系统默认使用的locale设置,通常情况下,对于中文环境,系统应设置为`zh_CN.UTF-8`。如果你发现系统中并未使用此locale,你需要在`/etc/environment`文件中设置相应的locale。 参考资源链接:[Ubuntu下中文乱码解决方案:设置编码为GB18030](https://wenku.youkuaiyun.com/doc/5k62pbgfsk?spm=1055.2569.3001.10343) 接下来,对于Gedit文本编辑器,可以通过图形界面工具`gconf-editor`来设置。在终端中输入`gconf-editor`命令打开该工具,然后导航至`apps/gedit-2/preferences/encodings`节点。确保`auto_detected`选项设置为`true`,这样Gedit可以自动检测到文件的编码类型。同时,在`encoding`选项中设置支持的编码类型,如`utf-8`, `gb2312`, `gbk`, `gb18030`等,以覆盖可能遇到的编码情况。 对于vim编辑器,需要编辑`vimrc`配置文件来设置编码。使用`sudo vi /etc/vim/vimrc`命令打开该文件,并添加以下内容: ``` set fileencodings=utf-8,gb2312,gbk,gb18030,big5 set termencoding=utf-8,gb2312,gbk,gb18030 ``` 这样配置后,vim会在打开文件时根据文件内容或系统环境自动选择正确的编码。 此外,你还可以通过设置环境变量`LANG``LC_ALL`来指定使用特定的编码。例如,要在终端中使用GB18030编码,可以在终端中输入`export LANG=zh_CN.GB18030`。 综合上述步骤,通过设置系统locale、文本编辑器配置环境变量,可以有效解决Ubuntu系统中文乱码问题,确保中文文档在编辑时的正确显示。如果你希望了解更多关于字符编码的知识,可以参考《Ubuntu下中文乱码解决方案:设置编码为GB18030》,这份资料提供了更为深入的讲解实践指导,有助于你解决在Ubuntu系统中遇到的各种编码问题。 参考资源链接:[Ubuntu下中文乱码解决方案:设置编码为GB18030](https://wenku.youkuaiyun.com/doc/5k62pbgfsk?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值