linux系统中的中文显示问题

文章讲述了在Linux系统中处理包含中文的项目文件时遇到的编码问题,涉及系统环境变量、终端软件(如xshell和putty)、VIM编辑器的设置以及Python代码中的编码处理。作者介绍了如何通过设置LANG、字符集和VIM配置来确保中文显示正确。
摘要由CSDN通过智能技术生成

经常遇到这种情况:某些项目的文件中不可避免地包含有中文,在Windows系统中没有任何问题,拷到Linux系统中就出问题了。

1. Linux系统设置

$echo $LANG
en_US.iso885915

朋友建议我设置为:

 export LANG=zh_CN.utf8

但我这样设置之后,python 代码 os.listdir() 的结果还是会发生编码错误,于是在Linux系统设置了一个最宽泛的字符集:

export LANG=zh_CN.gb18030

这个设置最好写入“~/.bashrc”中,而不是在命令行或者脚本中写,这样更稳定。

2.终端软件字符集设置

Linux系统的编码方式选择了‘gb18030’, 则终端软件的字符集也应该选择‘gb18030’。

xshell的设置界面如下:

我用的终端软件是putty,但我发现putty的字符集选项中居然没有‘gb18030’这个选项。

朋友建议选择“Use font encoding”这个选项。

这样是没问题了,运行Python代码,截图如下:

  可以看出,标准输入的中文显示是没有问题了。

但如果vi进入某个包含中文的文件,仍然会有乱码。

这个时候就应该找vim设置方面的原因。

3.VIM设置

关于vim设置以适应中文显示,很多博文已经写得足够详细,比如:

vim编辑器中文输入乱码问题_vim中文乱码_.Lance的博客-CSDN博客

vim ~/.vimrc 

在其中输入:

set fileencodings=utf-8,gb2312,gbk,gb18030  
set termencoding=utf-8  
set fileformats=unix  
set encoding=prc

我自己的设置如下:

set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1,gbk,gb18030

反正不嫌多,都加在里面。

然后就没有问题了 

 总结:中文乱码主要是注意服务器和字符终端的字符集设置问题,保持一致,支持中文。

解决了以上的问题之后,我其实可以在Python代码里面直接匹配中文字符的。

# -*- coding: utf-8 -*-
import re
import os, sys
import numpy as np
import pandas as pd
from collections import defaultdict
from optparse import OptionParser
import joblib
import chardet
import glob

in_dir = '/mnt/lustre/user/wubin/03.Clinical_Data/08.PMseq/PMSeq_check/V350178576'



for sample_dir in os.listdir(in_dir):
    path = os.path.join(in_dir, sample_dir)
    if not re.search(r'^[0-9]{2}P[0-9]+', sample_dir):
        continue
    if not os.path.isdir(path):
        continue
    
    if re.search(r'阴性对照', sample_dir):
        print(sample_dir)

运行的结果:

 

4. python2中仍然有问题

以上使用的Python解释器是Python 3.6.7。

而使用Python 2.7,使用这段代码却无法匹配出来

在Python2 下,我目录下面命名有“23P00000079_阴性对照_V350178576_20230817” 但我读出来的值,无论怎么encode,decode,都绝不可能 == “23P00000079_阴性对照_V350178576_20230817”,因为后者是bytes格式的 在python3下面由于代码中显示写出的“23P00000079_阴性对照_V350178576_20230817”是字符串,可以直接匹配

目前无法理解,也不知道怎么匹配(在python 2.7条件下)

后来朋友在自己的集群中试了一下,他那边是没有问题的:

 

但我用同样的代码就是不行,而且似乎是os.listdir()读取的内容不能被decode('gb18030') 

 暂时不纠结这个问题了,直接用python3即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值