传递参数消除情势,空格无法交替

   
二回坑爹的小bug。读取一段文字(编码utf-捌),想替换掉空格,str_replace(”
“..)、preg_replace(“/\s/”..)都不起作用。

www.5929.com,传递参数消除情势,空格无法交替。十陆进制值 一. + U牧马人L 中+号表示空格 %2B

python基础知识计算

www.5929.com 1

python有段日子没用了,实在是惭愧啊,丑挫穷后天调节初始对python基础知识重新实行总括,以慰自心。

一.python概念

  1. Python是大名鼎鼎的“龟叔”Guido van
    罗斯尔um在1987年圣诞节里面,为了打发无聊的圣诞节而编辑的二个编程语言。

  2. python定位“优雅”,“简单”,“明确”

二.python安装

三.python基础

一.输入输出

输入输出input/output,简称I/O

输出:

print语句也得以跟上几个字符串,用逗号“,”隔离,就足以连成1串输出,逗号在print语句里面看做空格,print能够输出整数和举行演算输出结果

输入:

raw_input:输入值并存放到变量里面

变量相信不需求多说了

二.数据类型

整数:

Python能够处理任意大小的整数,当然包罗负整数,在先后中的表示方法和数学上的写法1模同样,例如:1100-80800,等等。

Computer由于应用2进制,所以,有时候用十六进制表示整数比较便宜,十⑥进制用0x前缀和0-9,a-f表示,例如:0xff000xa5b4c3d2,等等。

浮点数:

浮点数也正是小数,之所以称之为浮点数,是因为遵照科学记数法表示时,一个浮点数的小数点地方是可变的,比如,一.2三x109和12.3×108是卓殊的。浮点数可以用数学写法,如1.233.14-9.01,等等。不过对于十分的大或十分小的浮点数,就无法不用科学计数法表示,把十用e替代,一.二三x109就是1.23e9传递参数消除情势,空格无法交替。,或者12.3e8,0.00001贰方可写成1.2e-5,等等。

平头和浮点数在处理器内部存款和储蓄的不二等秘书籍是见仁见智的,整数运算永久是精确的(除法难道也是标准的?是的!),而浮点数运算则大概会有四舍伍入的标称误差。

字符串:

字符串是以”或””括起来的4意文本,比如'abc'"xyz"等等。请小心,”或””本身只是一种象征方法,不是字符串的1局地,因此,字符串'abc'只有abc这3个字符。如果'自作者也是1个字符,那就足以用””括起来,比如"I'm OK"饱含的字符是I'm,空格,OK这6个字符。

只要字符串内部既涵盖’又包含”如何做?能够用转义字符\来标志,比如:转义字符\能够转义许多字符,比如\n表示换行,\t表示制表符,字符\自笔者也要转义,所以\\意味着的字符正是\

设若字符串里面有多数字符都亟待转义,就需求加大多\,为了简化,Python还允许用r”表示”内部的字符串暗中同意不转义

比方字符串内部有大多换行,用\n写在一行里不佳阅读,为了简化,Python允许用”’…”’的格式表示多行内容。

布尔值:

布尔值和布尔代数的代表一样。布尔值唯有True也许False二种值,python能够用True
或 False表示布尔值,注意分寸写,也足以透过布尔运算,比如:

>>> True

True

>>> False

False

>>> 3 > 2

True

>>> 3 > 5

False

布尔值能够用and or not
来运算,and是与运算,都以True才会是True,or是或运算,有2个True就为True,not是单目运算符,表示非运算True变False,False变True。

布尔值1般用在基准推断中

空值:

空值是Python里3个破例的值,用None表示。None不能够了然为0,因为0是有含义的,而None是二个非同一般的空值。

python还有列表,元组,字典,还有自定义数据类型,后边11整理道来

变量:

大小写英文字母,数字,_下划线且不可能以数字初阶,能够表示各类数据类型

动态语言:变量自个儿类型不定点的称之为动态语言,反之正是静态语言,如java,评释时必须钦定项目

a=’aaa’

代表在内部存款和储蓄器中开创aaa字符串,在内部存款和储蓄器中开创a变量,并将a变量指向aaa

a=b

表示将a变量指向b变量的值

常量:

不能够变的变量,例如PI,python中尚无编写制定表示常量不可能变,壹般习惯用大写字母来表示常量

③.字符串和编码

字符串是壹种数据类型,字符串有1个标题就是编码难点,Computer只可以处理数字,要拍卖文件,必须将文件用数字来代表,这样就有了编码,而计算机是由意大利人发明的,英文能够用3个字节表示,最早唯有128个字符被编码到计算机,这么些编码表称为ASCII码,但处理中文三个字节不够,至少需求八个字节,而且还不可能和ASCII码争持,所以,中中原人民共和国制订了GB231二码

稠人广众语言那么多,各国有各国的正规,不可制止的会有争辩,unicode就像是此爆发了,unicode常常是四个字节,卓殊偏僻的字才用更加多字节,ASCII码后边补0就是unicode码了

用unicode码也有题目,纵然联合用unicode编码乱码难点一蹴即至了,可是占用空间大了,这样就有了可变长编码utf-8

utf-8将三个unicode字符依据不相同数字大作者码成1-四个字节,常用的英文字母编码为二个字节,汉字平日多个字节,很生分的字符才会编码成四-五个字节,要是用于大气英文,utf-八可以节约不计其数空间。UTF-八还2个便宜就是ASCII码实际能够看作utf-八的一片段,多量支撑ASCII码的历史遗留软件能够在utf-8编码下持续做事。

搞精通了ASCII、Unicode和UTF-八的关联,大家就能够总结一下现行反革命计算机种类通用的字符编码工作方式:

在处理器内部存款和储蓄器中,统1行使Unicode编码,当必要保留到硬盘恐怕要求传输的时候,就转变为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转移为Unicode字符到内部存储器里,编辑实现后,保存的时候再把Unicode转变为UTF-八保存到文件

浏览网页的时候,服务器会把动态变化的Unicode内容转变为UTF-八再传输到浏览器,所以您看到众多网页的源码上会有接近<meta
charset=”UTF-八” />的消息,表示该网页就是用的UTF-8编码。

4.python字符串

python诞生比unicode早,所以最早的python只援救ASCII码,字母和数字对应,python提供了ord()和chr()函数将字母和相应的数字兑换,python后来加多了对unicode帮忙,unicode字符串表示u’…’,’…’可以看做utf-八编码或然ASCII编码,可是u’…’只好当作unicode编码,英文表示的unicode编码和utf-捌编码一样,不过占用的半空中不一样,而普通话字符转变后2个unicode字符将成为四个utf-八字符,len()函数再次来到字符串长度,将utf-八字符调换为unicode字符,用decode(‘utf-八’),python源码也是二个文件文件,1般保存为utf-八,#coding
utf-8

5.格式化

最广大的是出口格式化的字符串,python的格式化和c语言1致,%s用字符串替换,%d用整数替换,借使只有2个%?,括号能够归纳,

普及的占位符:

%s 字符串

%d整数

%f 浮点数

%x 十陆进制整数

牢记:格式化整数和浮点数能够钦点是还是不是补0和整数和小数的位数

>>>'%2d-%02d'%(3,1)'3-01'>>>'%.2f'%3.1415926'3.14'

假设你不鲜明用怎样,%s可以将其余数据类型转换为字符串

>>>'Age:%s.Gender:%s'%(25,True)'Age:25.Gender:True'

对于unicode字符,用法完全平等,但极致保障替换的字符串也是unicode字符串

>>>u'Hi,%s'%u'Michael'u'Hi,Michael'

假设字符串的%也是二个平凡字符,那就要求转义,%%表示%

待续。。。

python有段日子没用了,实在是惭愧啊,丑挫穷前几日调节开端对python基础知识重新开始展览总结,以慰自心。
1.python概念 Pytho…

本章目录

  • Part One:字符编码
  • Part Two:字符串
  • Part Three:字符串格式化

字符串能够说是全部产生语言中利用最普遍的数据类型,Python也不例外。而处理字符串,首先要求注意的就是编码难点。

<?php

// 替换<p>后4个空格
$str = file_get_contents("http://m.ts.cn/new/99cms_ts/api.php?s=/News/getNewsInfoTmp/Nid/51089");
$str = str_replace(" ", "-", $str);
$str = preg_replace("/\s/", "-", $str);
echo $str;  // 不起作用
  1. 空格 U凯雷德L中的空格可以用+号也许编码 %20
  2. / 分隔目录和子目录 %2F
  3. ? 分隔实际的 U奥迪Q伍L 和参数 %三F
  4. % 内定尤其字符 %二伍
  5. # 表示书签 %二三
  6. & U卡宴L 中内定的参数间的相间符 %二陆
  7. = U途锐L 中钦命参数的值 %3D

字符编码

Computer的面目实际上便是由0和一结合的,所以说不论中文照旧英文字符串,最后都要调换为数字。
最早只有1二七个字符被编码到Computer里,也正是大大小小写英文字母、数字和局地符号,这些编码表被称作ASCII编码。
可是要处理粤语分明3个字节是不够的,至少须要八个字节,而且还不能够和ASCII编码龃龉,所以,中国制订了GB231二编码,用来把汉语编进去。
后来吧,为了处理越多的言语,Unicode应运而生。Unicode把具有语言都合并到1套编码里,那样就不会再有乱码难点了。
Python2.x多级正是用的ASCII编码,而Python3.x就从头选择unicode了,那样普通话彰显难点就有了不小的精益求精。那里打字与印刷了一下windows下Python3.陆的各样编码:

www.5929.com 2

Python编码.png

能够阅览,基本统壹为了utf-8。那么怎样是utf-8呢?utf-八其实是一个可变长编码。它把3个Unicode字符依照分歧的数字大小编码成1-6个字节,常用的英文字母被编码成三个字节,汉字平常是贰个字节,唯有很生分的字符才会被编码成四-多少个字节。假设您要传输的文件包涵多量英文字符,用UTF-八编码就能节约空间:

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

从地点的表格仍是能够发现,UTF-捌编码有多个卓殊的裨益,正是ASCII编码实际上能够被作为是UTF-八编码的壹某些,所以,大批量只帮助ASCII编码的野史遗留软件能够在UTF-8编码下继续做事。
在计算机内部存款和储蓄器中,统一运用Unicode编码,当须要保留到硬盘也许要求传输的时候,就调换为UTF-八编码。
用记事本编辑的时候,从文件读取的UTF-八字符被调换为Unicode字符到内部存款和储蓄器里,编辑完成后,保存的时候再把Unicode调换为UTF-捌保存到文件:

www.5929.com 3

image.png

  无法,将替换不了的空格ord()下才来看,这几个utf-8空格相比非常。ASCII
1玖四 + 160出来的。

杀鸡取蛋的点子:
replace() 方法假使直白用str.replace(“-“,”!”) 只会交替第三个万分的字符.
而str.replace(/\-/g,”!”)则能够轮换掉全数极度的字符(g为大局标识)。
replace()
js中替换字符变量如下:

字符串

字符串正是用单引号(‘)也许双引号(“”)包裹起来的文字,在Python风格规范里引入三个模块使用一种标记作为字符串表示。在字符串内能够利用此外壹种引号,
避防止在字符串中接纳。
例如:

print('Why are you hiding your eyes?')
print("I'm scared of lint errors.")
print('"Good!" thought a happy Python reviewer.')

结果为:

www.5929.com 4

String.png

故而说,除非想在字符串内含有单引号可能双引号,每多个Python文件最棒利用同样种标记。
对此单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码调换为相应的字符:

www.5929.com 5

ord和chr.png

比方通晓字符的平头编码,还足以用十陆进制这么写str(unicode格局):

www.5929.com 6

uniode中文.png

只要要在网络上传输,大概封存到磁盘上,就须求把str变为以字节为单位的bytes。Python对bytes类型的数额用带b前缀的单引号或双引号表示:

var = b"ABC"

要专注区分’ABC’和b’ABC’,前者是str,后者尽管内容突显得和前者相同,但bytes的每种字符都只占用三个字节。
以Unicode表示的str通过encode()方法能够编码为钦点的bytes,例如:

www.5929.com 7

encode.png

纯英文的str能够用ASCII编码为bytes,内容是一律的,含有普通话的str能够用UTF-八编码为bytes。含有中文的str不只怕用ASCII编码,因为中文编码的限制抢先了ASCII编码的限量,Python会报错。
扭转,从bytes到str能够用decode方法,原理和操作都以同样的,不再赘述了。
末尾,能够看下len方法,len是length的缩写,翻译过来正是测算str或然bytes的字符字节数,例如:

www.5929.com 8

len.png

可知,二个普通话字符经过UTF-八编码后一般会据有二个字节,而3个英文字符只占用叁个字节。
在操作字符串时,大家平时遇上str和bytes的并行调换。为了制止乱码难题,应当始终坚定不移采取UTF-8编码对str和bytes实行转移。
还有其余1些常用的秘籍,如spli(分割),
join(拼接),replace(替换),upper(大写),lower(小写),strip(去除两端空格),lstrip(去除左端空格),rstrip(去除右端空格)等,用法都相比轻易,可参看源码调用就能够。

<?php

// 替换<p>后4个空格
$str = file_get_contents("http://m.ts.cn/new/99cms_ts/api.php?s=/News/getNewsInfoTmp/Nid/51089");
$str = str_replace(chr(194) . chr(160), "-", $str);  // 解决方法
echo $str;  // OK

 data2=data2.replace(/\%/g,”%25″);
 data2=data2.replace(/\#/g,”%23″);
 data2=data2.replace(/\&/g,”%26″);

字符串格式化

  1. 字符串格式化正是在钦点地点先放一个占位符,然后用变量来替换,那样就足以以同一的格式输出不一致的剧情。
    最轻松易行的案例如下图所示:
![](https://upload-images.jianshu.io/upload_images/6879662-35e9e9fc9e8b349f.png)

字符串格式化.png



其中,占位符常用的有:
占位符 替换内容
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数

还有大多别样占位符,不太常用,需求的时候再去查就好了。
别的,假诺不鲜明,能够选择字符串占位符,因为其余类型都转载为字符串。

  1. 勇敢说法是%号的艺术已经不合时宜了,用format方法来操作字符串格式化更确切。
    用作3个刚入门的学人,未有技能去分别那两头的3陆九等,相对来说,个人依旧喜欢format格局多一些,以为更专业。
    format格局的根基用法就是用{0},{一}…来取代站位符,假若用{}代表行使暗中认可顺序,例如:
![](https://upload-images.jianshu.io/upload_images/6879662-9ba20d5a74127547.png)

format格式化.png



另外,还有一些比较详细的用法:



![](https://upload-images.jianshu.io/upload_images/6879662-a9310b98109d7212.png)

format格式化进阶.png

  实验下这些空格。

此外部分素材。。。仅供参考。。。

<?php

// utf-8无bom文件下,四个空格
$s1 = chr(194) . chr(160);
$s2 = chr(32);
$s3 = " ";
$s4 = " ";  // 全角空格
$s = $s1 . $s2 . $s3 . $s4;

// 判断
$r  = '';
if ($s1 == $s2) $r .= 1;
if ($s1 == $s3) $r .= 2;
if ($s1 == $s4) $r .= 3;
if ($s2 == $s3) $r .= 4;
if ($s2 == $s4) $r .= 5;
if ($s3 == $s4) $r .= 6;

// 结果
echo $s, "#####", $r, "####", str_replace(" ", "-", $s), "####", preg_replace("/\s/", "-", $s);

在行使url实行参数字传送递时,平日会传递壹些汉语名(或包罗特殊字符)的参数或U奥迪Q5L地址,在后台处理时会爆发转变错误。在多少传递页面使用GB231二,而在吸收接纳页面使用UTF八,那样接收到的参数就或然会与原来产生不平等。使用劳务器端的urlEncode函数编码的U奥迪Q5L,与应用客户端java的encodeU索罗德I函数编码的U奥迪Q3L,结果就不雷同。

  结果:为便于书写,|代表空格,|代表全角空格。

java对文字进行编码涉及三个函数:escape,encodeURubiconI,encodeUQX56IComponent,相应3个解码函数:unescape,decodeU昂科拉I,decodeUTucsonIComponent

  ||||####4####|–|####|–|

java中的编码方法:
escape() 方法:接纳ISO
Latin字符集对点名的字符串举办编码。全体的空格符、标点符号、特殊字符以及其余非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面包车型大巴编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此办法编码的字符:
@ * / +

  改下浏览器编码为gbk,结果:聽
銆€#####4####聽–銆€####聽–銆€

encodeUSportageI()方法:把U汉兰达I字符串选拔UTF-八编码格式转化成escape格式的字符串。不会被此办法编码的字符:!
@ # $& * ( ) = : / ; ? + ‘

 

encodeU奥迪Q7IComponent
()方法:把U索罗德I字符串接纳UTF-八编码格式转化成escape格式的字符串。与encodeUCR-VI()比较,这些法子将对越多的字符进行编码,比如
/
等字符。所以只要字符串里面富含了USportageI的多少个部分的话,无法用这一个主意来张开编码,否则/ 字符被编码之后U福特ExplorerL将显得错误。不会被此措施编码的字符:! * ( )

  难点的来源于,在于UTF-捌那种编码里面,存在一个古怪的字符,其编码是“0xC2
0xA0”(194
160),转换到字符的时候,表现为七个空格,跟一般的半角空格(ASCII
0x20)同样,唯1的不等是它的小幅度不会被收缩,因而比较多的被用来网页排版(如首行缩进之类)。而别的的编码格局如GB231二、Unicode之类并不曾这么的字符。

故而,对于华语字符串来说,若是不希望把字符串编码格式转化成UTF-8格式的(比如原页面和对象页面包车型的士charset是一律的时候),只须求采用escape。假使你的页面是GB231二或许其余的编码,而接受参数的页面是UTF-八编码的,将要动用encodeU奥迪Q7I也许encodeULacrosseIComponent。

  总结下来就是:轮换不了的字符,打字与印刷出ASCII码来总能替换掉啊。

除此以外,encodeULANDI/encodeU汉兰达IComponent是在java一.5从此引入的,escape则在java壹.0本子就有。
1、 
传递参数时需求选拔encodeU福特ExplorerIComponent,那样组合的url才不会被#等特殊字符截断。

 

   例如:< language=”java”>write(‘<a
href=”;

参考:缓解收集UTF-8网页空格产生问号乱码  诡异的UTF8空格

2、  实行url跳转时能够完全选用encodeU君越I

例如:Location.href=encodeURI(“”);

叁、  js使用数据时得以动用escape

例如:搜藏中history纪录。

4、 
escape对0-255以外的unicode值举行编码时输出%u****格式,别的景况下escape,encodeU哈弗I,encodeUPAJEROIComponent编码结果一致。

最Dolly用的应为encodeULX570IComponent,它是将中文、土耳其语等特殊字符转换来utf-8格式的url编码,所以只要给后台传递参数须求使用encodeU哈弗IComponent时索要后台解码对utf-八协理(form中的编码格局和当前页面编码格局同样)

escape不编码字符有66个:*,+,-,.

一. + U牧马人L 中+号表示空格 %二B 贰. 空格
URAV4L中的空格能够用+号大概编码 %20 叁. / 分隔目录和子目录 %二F 肆. ?
分隔实际的 UPRADOL 和参数 %3F 伍….

Leave a Comment.