中文乱码问题

1、linux系统打开文件中文编码问题

使用过unix2dos进行转换并没有什么卵用。 但是发现可以使用dos2unix去掉末尾的换行符^M。

1-1、方法1

在Linux下偶尔打开txt会出现中文乱码问题。 场景:在vim编辑下使用:set fileencoding命令查看编码格式为cp936 快速解决方式: iconv -f gbk -t utf8 PythonStudy.txt > Python.txt.utf8

1-2、方法2

优缺点:vim打开正常,但是使用cat等打开仍然乱码。

切换至root用户,用vim打开vimrc文件。

vim /etc/vim/vimrc
vim /etc/vimrc
在文件的末尾加入以下内容:

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

注意第一行参数末尾有s

1-3、方法3

用记事本打开文件,点击另存为,在下方的编码方式中选择utf-8方式。

2、python编写的exe文件在英文版win10下运行报中文编码错误

2-1、dos窗口无法显示中文

很奇怪,dos窗口显示中文乱码,但是将全屏内容复制到新建的txt文档中就能正常显示中文了,dos窗口字体设置没有中文字体。

方法一:修改注册表

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:000003a8

方法二:这是一种临时的做法,每次都要修改(搞定) 打开cmd, 键入命令chcp 936,使用简体中文代码就好了

方法三: 在cmd下用如下命令: chcp 437 graftabl 936

方法4: 在HKEY_CLASSES_ROOT下的Folder下的shell下新建DOS项类型为REG_SZ,值为任意用于在右键菜单中显示,在其下再键command,REG_SZ,值为cmd.exe /E:ON /K c:cmd专用.bat %1 在c:下建立文件:cmd专用.bat

2-2、UnicodeEncodeError: 'charmap' codev can't encode characters in position 60-68: character maps to

其实是logging库打印中文到本地txt文件导致。 使用python的logging模块记录日志,有时会遇到中文编码问题错误。

低版本python推荐: 在logging.FileHandler(path) 中添加指定编码方式 encoding='utf-8' 即可,

file_handler = logging.FileHandler(path, encoding='utf-8') 
logging.basicConfig(level=logging.INFO, handlers={file_handler})

高版本python推荐: 在logging.basicConfig中直接设置:

import logging
logging.basicConfig(
    level=日志等级, 
    format=输出格式, 
    datefmt=日期时间格式, 
    encoding=日志编码格式,(Python3.9才有)
    filename=日志文件,
    filemode=日志文件写入模式,
)

stream : 日志的输出流,可以指定输出到 sys.stderr, sys.stdout 或者文件, 默认输出到 sys.stderr, 当 stream 和 filename 同时指定时, stream 被忽略 利用 stream 输出到文件便可以解决编码问题, 然而这样一来却也带来了一些问题 首先, 文件在程序运行过程中必须始终保持打开状态 其次, 不能同时进行写入文件与控制台输出

file = open("log", encoding="utf-8", mode="a")
logging.basicConfig(level=logging.DEBUG,
                    stream=file,
                    format="%(asctime)s "
                           "%(filename)s [line:%(lineno)d] "
                           "%(levelname)s"
                           "%(message)s",
                    datefmt="%a, %d %b %Y %H:%M:%S"
                    )

2-3、还会遗留一个问题

直接双击exe文件运行,dos还是显示中文乱码。 发现把字体修改成NSimSun后,dos窗口的字体就显示正常了。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"autorun"="chcp 936"

治标不治本的方法,如果中间调用了dos命令,就会执行上面的命令,就会把整个页面变成中文了。

个人觉得比较完美解决的方案,直接在代码中解决,不破坏宿主机的环境变量,在代码运行前添加:

os.system('chcp 936 & cls')

results matching ""

    No results matching ""