Python简单的小实验输出对应车站的中文简写(主要是为了解决汉字编码问题)

今天在写代码的时候遇上了中文编码报错的问题,ASCII和Unicode转化的问题,报错如下:

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

每次遇上中文都感觉头大,这次由于需要使用中文来作为键值所以必须解决好这个问题,同样的汉字使用utf-8编码之后变为:
如:武汉------>u'\u6b66\u6c49'
       可是做键的时候就变成了:'\xe6\xad\xa6\xe6\xb1\x89'
     实在是不知道怎么回事,后来找到了解决办法就是使用字符串编码检测方法找到字符串的编码方式,然后使用该编码方式来编码即可,具体实现如下:


#!usr/bin/env python
#encoding:utf-8

'''
__Author__:沂水寒城
功能:中文编码问题
'''


import xlrd
import chardet


def create_huoche_station_dict(data='china_station_names.xls'):
    '''
    创建:站名--字母简称字典
    '''
    station_name_dict={}
    content=xlrd.open_workbook(data)
    table=content.sheets()[0] 
    nrows=table.nrows #行数
    ncols=table.ncols #列数
    for i in range(1,nrows):
        row=table.row_values(i)
        if row:
            station_name_dict[row[1]]=row[-1]
    return station_name_dict


if __name__ == '__main__':
    station_name_dict=create_huoche_station_dict(data='data/xidu/china_station_names.xls')
    station_list=["武汉","青岛北","北京西","菏泽","郑州东","哈尔滨西","重庆北","广州东","大同","新乡","拉萨","上海","兰州",
                  "桂林","洛阳","泰安","威海","烟台","济南西","沈阳北","长春","长沙","福州","偃师","成都"]


    for one in station_list:
        JX=station_name_dict[unicode(one,chardet.detect(one)['encoding'])]
        print '{0}车站简写为:{1}'.format(one,JX)


结果如下:


武汉车站简写为:WHA
青岛北车站简写为:QDB
北京西车站简写为:BJX
菏泽车站简写为:HZE
郑州东车站简写为:ZZD
哈尔滨西车站简写为:HEX
重庆北车站简写为:CQB
广州东车站简写为:GZD
大同车站简写为:DTO
新乡车站简写为:XXI
拉萨车站简写为:LSA
上海车站简写为:SHA
兰州车站简写为:LZH
桂林车站简写为:GLI
洛阳车站简写为:LYA
泰安车站简写为:TAN
威海车站简写为:WHA
烟台车站简写为:YTA
济南西车站简写为:JNX
沈阳北车站简写为:SYB
长春车站简写为:CCH
长沙车站简写为:CSH
福州车站简写为:FZH
偃师车站简写为:YSH
成都车站简写为:CDU
[Finished in 0.5s]


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Together_CZ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值