1. 首先先来说说中文的问题。众所周知,作死的python经常和中文过不去

每次,开头必须声明

# coding: utf-8

或者是

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

然而,被坑过的人都知道。这样是远远不够的,不折腾死你python是不会罢休的

print u"你好"       # 打印成unicode的类型

print u"你好".encode('gbk')   # 打印成unicode的类型,再转码成'gbk'的

print "你好".decode('gbk').encode('gbk')       # 解码成unicode再转码成''gbk类型的

在powershell中,上述三种才能显示出中文。而raw_input(">>> ")就只能用后面2种了。

这是为什么呢?让我们来试验一下吧。

s1 = u"你好"

s2 = u"你好".encode('gbk')

s3 = "你好".decode('utf-8').encode('gbk')

print type(s1)

输出<type 'unicode'>

print type(s2)

输出<type 'str'>

print type(s3)

输出<type 'str'>

显然,放在raw_input(">>> ")里面的都是被包含" "的str字符串。你用第一种,unicode

类型的来替换str型的,当然会报错啦。

------------------------------------------------------------------------------------------------------

2. 接下来说说if语句和for语句的

txt = "123"

if 1 in txt:

print "Right"

很显然,这也是类型不对应导致的错误,所以,

data = raw_input(u"取值".encode('gbk'))

if data > "2" / if "2" in data:

这种的,同样要注意,两边都要是字符串

------------------------------------------------------------------------------------------------------

3.还有一种更变态的错法,就是当不是unicode类型的汉字,用到for语句时,元素个数会发生改变。

s1 = "你好"

s2 = s1.decode('utf-8')

s3 = s2.encode('gbk')

把字符串变成列表的三种方法, 就是下面的a依次变成a, a.split(), list()

def list(a):

empty = []

for i in a:

empty.append(i)

print len(a)

list(s1)

list(s2)

list(s3)

最终我们会发现只有unicode类的汉字的列表元素个数始终正确。而在这三种构成列表的方法中,也只有

a.split()时三种汉字的列表元素个数是相等的。所以,为了安全起见,我们以后用for...in...时,还是用u

型的汉字为好。最好都用unicode型的汉字。

那么,问题又来了,万一遇到始终都是str字符串型的raw_input()时该怎么办呢?

import sys

raw_input(">>> ").decode(sys.stdin.encoding)如此一来。里面就也弄不了中文提示了。

参考: http://www.tuicool.com/articles/yMrMzmQ

【编码问题】if,for语句与中文编码的更多相关文章

  1. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句

    MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...

  2. 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)

    背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...

  3. sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码

    不论使用urllib还是使用requests库经常会遇到中文编码错误的问题,我就经常遇到,因为python安装在windows平台上,cmd的默认编码为GBK,所以在cmd中显示中文时会经常提示gbk ...

  4. Python 编码简单说

    先说说什么是编码. 编码(encoding)就是把一个字符映射到计算机底层使用的二进制码.编码方案(encoding scheme)规定了字符串是如何编码的. python编码,其实就是对python ...

  5. R语言读写中文编码方式

    最近遇到一个很头疼的事,就是 R语言读写中文编码方式.在网上找到了一篇博文,谢谢博主的精彩分享,让我很快解决了问题,在此也分享一下 R语言读写数据的方法很多,这里主要是我在使用read.csv/rea ...

  6. python 之 utf-8编码的秘密

    python3的默认编码方案是utf-8编码,看了些资料,来做总结. 要说utf-8,就要说说unicode,要说unicode,就要说ASCII,我们还是慢慢来. 1.ASCII ASCII编码最初 ...

  7. linux设置语言编码

    前段时间在服务器上安装了centos6.2版本,当初安装时语言选择英文.这本来也没有什么问题,直到前一段时间.我的同事发现部署的web项目中出现乱码情况.但中文作为参数进行传递到下一个页面的时候就乱码 ...

  8. java编码问题深入总结

      Java语言能够这么普遍的应用,与其国际化的能力是 分不开的,国际化的编码是Java国际化中最重要的一个组成部分,Java的国际化编码能力与其使用Unicode编码是直接相关的.在Java中,任何 ...

  9. Java所有编码问题参考手册

     一.编码基本知识 1.iso8859-1 ——属于单字节编码,最多能表示的字符范围是 0-255,应用于英文系列.比如,字母 'a' 的编码为0x61=97. 很明显,iso8859-1 编码表示的 ...

随机推荐

  1. offsetLeft

    offsetLeft 获取的是相对于父对象的左边距,且返回值为数字: left 获取或设置相对于 具有定位属性(position定义为relative)的父对象 的左边距,且返回值是字符串eg:10p ...

  2. 博客搬到CSDN了,以后就老实的呆在这儿吧~~

    几年前读书的时候就自己在做独立的个人博客网站,重做 + 改版好多次,域名也换了好几个- 163fly.com.godbz.com.zhouz.me ... 都是我曾经用过的域名,都放弃了- 发现到头来 ...

  3. python连接mysql、oracle小例子

    import  MySQLdbimport  cx_Oracle   as  oraimport  pandas  as  pdfrom    sqlalchemy import create_eng ...

  4. fedora 使用trove的redstack 安装openstack环境

    以下命令可能是你经常需要用到的: dnf list installed 列出所有dnf安装的包 dnf remove packagename 删除包   先获取trove-integration gi ...

  5. 修改LibreOffice Draw中定义的样式名称

    目前我使用的是LibreOffice 4.2.4.2.经过以往的测试和使用经验,这是诸多版本中较为稳定和bug相对较少的.今天无意中发现该版本的LibreOffice Draw存在一个问题:样式名称修 ...

  6. 洛谷-均分纸牌-NOIP2002提高组复赛

    题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸 ...

  7. CharSequence 接口

    java中有些方法需要用到CharSequence 类型的参数,笔者百度了一下,总结出一下几点: 1.CharSequence 是一个接口,可以直接用“=”赋值一段字符串,但是不能用new新建一个对象 ...

  8. 灾情巡视C语言代码

    /*"水灾巡视问题"模拟退火算法.这是一个推销员问题,本题有53个点,所有可能性大约为exp(53),目前没有好方法求出精确解,既然求不出精确解,我们使用模拟退火法求出一个较优解, ...

  9. Entitlements (授权机制) 延伸

    授权机制 (Entitlements) 到目前为止,我们都假设所有的证书起到的作用都是一样的,并且假设如果我们有了一个有效的证书代码签名也就相应的有效.然而这当然不是唯一的规则.操作系统有许多标准来检 ...

  10. Maxwell顺态求解器电磁力分析

    文源:技术邻 问题描述:求解一段通有正弦交流电的直导线在某一稳态磁场中的受力情况,并简单验证仿真结果. 模型介绍: 如上几何模型中10mm边长立方体代表永磁体,材料属性为材料库中的NdFe35,修改磁 ...