今天写了几个脚本,都遇到了中英文混编的情况。需求要将其中的中文标点符号切换为英文符号。
举个例子:

tags = '你好,good, 国语'

要将其中的中文半角逗号替换为英文逗号,为了方便后续的处理

如下处理:

tags = tags.replace(',', ',')

会抛出如下异常:
UnicodeDecodeError: 'ascii' codec can't decode byte ...

python中字串分成两种,byte string 和unicode string

一般来说,设定好#coding=utf-8后,所有带中文的参数都会声明成utf-8编码的byte string

但是在函数中产生的字串则是unicode string

byte string 和 unicode string不能混用,所以就会抛出UnicodeDecodeError异常

byte_str = 'hello, this is byte string'
unicode_str = u'hello, this is unicode string'

所以有三种解决方案:

1. 全都转为byte string

2. 全都转为unicode string

3. 设置系统编码

1. 全都转为byte string

'你好' + request.forms.tags.encode('utf-8')

2. 全都转unicode.string

u'你好' + request.forms.tags

byte string 和unicode string相互转换

b_s = 'test'
u_s = unicode(b_si, 'utf-8')
back_to_b_s = u_s.encode('utf-8')

3. 设置系统默认编码

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

这样就可以任意的使用了

所以上面的问题就有解了:

tags = tags.replace(unicode(',','utf-8'), ',')

或者

tags = tags.encode('utf-8').replace(',', ',')

或者
调用setdefaultencoding设置系统encoding了

此外,还有读取UTF-8文件

可以使用codecs模块

import codecs
handler = codecs.open('test', 'r', 'utf-8')
u = handler.read() # returns a unicode string from the UTF-8 bytes in the file

codesc还能将传给write的unicode string转换为任何编码

在编写代码过程中,变量必须是ascii编码的,为了可以在文件中写中文,python需要知道文件不是ASCII编码

#!/usr/bin/env python

下添加

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

以上在python2中有效,在python3中已经区分了unicode string 和byte string,并且默认编码不再是ASCII

参考资料

http://www.evanjones.ca/python-utf8.html

Python2 中文编码处理的更多相关文章

  1. 第一天-python基础

    每一个今天的坚持都会改变明天的自己! 一.python介绍 python是一门由解释型.弱类型的高级开发编程语言,由龟叔于1989圣诞开发出,后经过二十多年的发展,因其简洁高效的特点而被广泛使用,在世 ...

  2. Python基础第一课

    Python基础 安装软件并配置环境变量 1.第一句python --初学后缀名可以是任何数 --后期学习需要导入模块时不是py后缀名会报错 2.两种执行方式 Python解释器 py文件路径 Pyt ...

  3. 【原创】python中文编码问题深入分析(三):python2.7文件读写中文编码问题

    上一篇文章介绍和分析了python2.7中使用print遇到的中文编码问题的原因和解决方案,本篇主要介绍一下python2.7中执行文件读写可能遇到的编码问题. 1.文件读取 假如我们读取一个文件,文 ...

  4. python2(中文编码问题):UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1

    python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't deco ...

  5. Python2.x 里解决中文编码的万能钥匙

    注意: Python2.x默认编码环境是ASCII,当和取回的数据编码格式不一致时,可能会造成乱码:我们可以指定保存内容的编码格式,一般情况下,我们可以在代码最上方添加 import sys relo ...

  6. python2.7 的中文编码处理,解决UnicodeEncodeError: 'ascii' codec can't encode character 问题

    最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息. 很快,我就遇到了异常: UnicodeEncodeError: ...

  7. 简介python2.x的编码

    python2.x的中文编码真是令人头痛,简单写下自己的一点python编码转换的体会. windows平台用的默认编码格式为gbk >>> s = raw_input() #在wi ...

  8. python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨

    python系列均基于python3.4环境 ---------@_@? --------------------------------------------------------------- ...

  9. [python基础]关于中文编码和解码那点事儿

    我们在用python处理中文的时候,或多或少会遇到这样一些错误 常见错误1: SyntaxError: Non-ASCII character '\xe4' in file C 常见错误2: Unic ...

随机推荐

  1. 经验总结35--IP地址区域匹配

    想知道客服端訪问的IP地址是多少,并知道区域. 一般能够去http://www.ip138.com/,输入IP查询,但没提供比較好的接口,程序使用不方便. 另外有些企业提供一些离线的IP数据库,能够进 ...

  2. 条形码(JBarcode)

    一世尘梦 少小离家老大回,妖娆尘世,程序唧唧:问君能有几多愁,恰是满屏BUG无处修. 商品条形码(JBarcode) 之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作: ...

  3. Asp.net vNext 学习3

    Asp.net vNext 学习之路(三) asp.net vNext 对于构建asp.net 程序带来了一些重大的改变,让我们开发asp.net 程序的时候更加的方便和高效. 1,可以很容易的去管理 ...

  4. Jquery.validate表单验证

    一.用前必备官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/API: http://jquery.bassista ...

  5. Android学习笔记:Home Screen Widgets(1):大约Widget

    什么是Home Screen Widgets Home screen Widget即称为小工具或者中文小工具,是显示在主页上的views,通过后台进程更新view的数据. Android由AppWid ...

  6. 快速构建Windows 8风格应用22-MessageDialog

    原文:快速构建Windows 8风格应用22-MessageDialog 本篇博文主要介绍MessageDialog概述.MessageDialog常用属性和方法.如何构建MessageDialog ...

  7. Lua 5.2 Reference Manual

    Lua 5.2 Reference Manual.pdf

  8. proguard android迷茫

    我们收拾它意味着蛊惑项目即将结束.上线.但是,当这个问题就更烦躁人,我也记录因混乱中遇到的问题 首先,我在装android4.0封装版本,有没有在这个文件查看器项目 假设有,请继续点击进入projec ...

  9. 基于jQuery的上下无缝滚动应用(单行或多行)

    工作中遇到的一个js代码,现在对.trigger('mouseleave'),仍一知半解... <script>$(function(){//单行应用var _wrap=$('ul.lin ...

  10. 安装Windows2008操作系统 - 初学者系列 - 学习者系列文章

    Windows2008这款服务器操作系统不知道有多少服务器在使用,毕竟前面有经典的2003系统,后续有2012操作系统.具体就不讨论这些了.下面就对Windows2008服务器操作系统的安装进行介绍. ...