【编码问题】if,for语句与中文编码
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语句与中文编码的更多相关文章
- {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句
MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
不论使用urllib还是使用requests库经常会遇到中文编码错误的问题,我就经常遇到,因为python安装在windows平台上,cmd的默认编码为GBK,所以在cmd中显示中文时会经常提示gbk ...
- Python 编码简单说
先说说什么是编码. 编码(encoding)就是把一个字符映射到计算机底层使用的二进制码.编码方案(encoding scheme)规定了字符串是如何编码的. python编码,其实就是对python ...
- R语言读写中文编码方式
最近遇到一个很头疼的事,就是 R语言读写中文编码方式.在网上找到了一篇博文,谢谢博主的精彩分享,让我很快解决了问题,在此也分享一下 R语言读写数据的方法很多,这里主要是我在使用read.csv/rea ...
- python 之 utf-8编码的秘密
python3的默认编码方案是utf-8编码,看了些资料,来做总结. 要说utf-8,就要说说unicode,要说unicode,就要说ASCII,我们还是慢慢来. 1.ASCII ASCII编码最初 ...
- linux设置语言编码
前段时间在服务器上安装了centos6.2版本,当初安装时语言选择英文.这本来也没有什么问题,直到前一段时间.我的同事发现部署的web项目中出现乱码情况.但中文作为参数进行传递到下一个页面的时候就乱码 ...
- java编码问题深入总结
Java语言能够这么普遍的应用,与其国际化的能力是 分不开的,国际化的编码是Java国际化中最重要的一个组成部分,Java的国际化编码能力与其使用Unicode编码是直接相关的.在Java中,任何 ...
- Java所有编码问题参考手册
一.编码基本知识 1.iso8859-1 ——属于单字节编码,最多能表示的字符范围是 0-255,应用于英文系列.比如,字母 'a' 的编码为0x61=97. 很明显,iso8859-1 编码表示的 ...
随机推荐
- WPF中TextBox的PreviewMouseLeftButtonUp事件
当使用TextBox的PreviewMouseLeftButtonUp事件时(例如,鼠标点击进入TextBox时,清除当前的输入内容),会很意外地发现,这时候不论怎么点击都无法点击到其他控件,焦点一直 ...
- HTML5学习之Web存储
在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...
- django manage.py 的各种功能
[简介] django-admin.py是Django的一个用于管理任务的命令行工具.本文将描述它的大概用法. 另外,在每一个Django project中都会有一个manage.py.manage. ...
- mmmmmmmm
// // AView.m // AutoLayout // // Created by ZhuYi on 16/5/24. // Copyright © 2016年 ZY. All rights r ...
- [Q]无矩形外框块参照图形的识别
该图纸的图框由块参照组成,其外侧图框不是矩形 使用默认设置无法正确识别,需要做以下修改:不勾选“块/外部参照”,勾选“块/外部参照边界”,勾选“制定块”并选择图框(块参照).
- centos7安装mariadb后无法启动的问题
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方 ...
- WIN7x64+VS2010+OpenCV2.4.10+cmake3.5.0重新编译OpenCV
1,参考博文 Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV [OpenCV入门教程之七] 玩转OpenCV源代码:生成OpenCV工程解决 ...
- javabean解决jsp中中文乱码问题
问题描述:useBean行为定义了Java Bean对象(Person类包括姓名[string],年龄[int]),使用html页面向JSP页面提交数据,JSP页面中使用Java Bean行为来处理提 ...
- cetos6 安装samba共享文件夹
yum方式安装 yum install samba 修改配置文件 vim /etc/samba/smb.conf [global] comment = global workgroup = QFpay ...
- bfs或者dfs Good Bye 2016 D
http://codeforces.com/contest/750/problem/D 题目大意: 放鞭炮,鞭炮会爆炸n次,每次只会往目前前进方向的左上和右上放出他的子鞭炮.问,最后能有多少格子被覆盖 ...