Python中文乱码问题集锦

By | 2017年7月12日

目录:

  1. # -*- coding: utf-8 -*-
  2. 注意编码格式
  3. 错误“UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xef in position 0: ordinal not in range(128)”
  4. import codecs

 

1.# -*- coding: utf-8 -*-

在程序的第一行添加以下指令:

# -*- coding: utf-8 -*-

这个基本上只能解决中文注释问题。

2.注意编码格式

源文件如下:

行业名称	交易日期	开盘价	收盘价	最高价	最低价	成交量	成交金额	换手率
农、林、牧、渔业	20140102	10.27	10.4108	10.4935	10.1886	204079136	2018686523	1.3047
采矿业	20140102	9.9227	9.8916	10.0363	9.753	600631854	4814913146	0.1637
农副食品加工业	20140102	11.3371	11.4331	11.5431	11.2083	171372475	2220440630	1.0073

使用pandas读 test.csv 文件时,如果这样写

trading = pd.read_csv('test.csv', index_col=1)      # the trade date as index
print trading.columns

结果显示如下:

Index([u'��ҵ����', u'���̼�', u'���̼�', u'��߼�', u'��ͼ�', u'�ɽ���', u'�ɽ����',
       u'������'],
      dtype='object')

如果这样写

trading = pd.read_csv('test.csv', encoding='gbk', index_col=1)      # the trade date as index
print trading.columns

结果显示正确,说明此文件是 gbk 编码。需要根据文件编码格式进行调整。

Index([u'行业名称', u'开盘价', u'收盘价', u'最高价', u'最低价', u'成交量', u'成交金额', u'换手率'], dtype='object')

然后在下面进行列提取时,也需要在列名前加u,例如:

# 字符串前面加u表示使用unicode编码

total_amount_group_by_date = trading[u'成交金额'].groupby(trading.index).sum()

3.错误

“UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xef in position 0: ordinal not in range(128)”

在代码中加上:

import sys
reload(sys)
sys.setdefaultencoding('utf8')

参考 mindmb的专栏

 

4.import codecs

import codecs
dest_time = codecs.open('different_time_different_sig.txt', 'w', 'utf-8')

使用codecs,dest.write的时候就可以直接写中文了。

但这里有个问题,写完的文件’different_time_different_sig.txt’,如果用excel打开,中文还是有乱码,如下图:

360反馈意见截图166809189083112

但是如果用Notepad打开,就能正常显示了:

360反馈意见截图1635091785117114

目前还不知道这个问题该怎么解决。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注