php 空格不能交替,utf-8空格惹的祸

参考:缓和搜罗UTF-8网页空格产生问号乱码  诡异的UTF8空格

例如:Location.href=encodeURI("");

字符串格式化

  1. 字符串格式化正是在钦赐地点先放三个占位符,然后用变量来替换,那样即能够平等的格式输出不一致的内容。
    最不难易行的案举个例子下图所示:
![](https://upload-images.jianshu.io/upload_images/6879662-35e9e9fc9e8b349f.png)

字符串格式化.png



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

再有为数不菲别的占位符,不太常用,供给的时候再去查就好了。
别的,固然不分明,能够动用字符串占位符,因为任何类型都转载为字符串。

  1. 奋勇说法是%号的艺术已经过时了,用format方法来操作字符串格式化更适于。
    用作一个刚入门的学人,未有技术去分别那二者的好坏,相对来讲,个人可能喜欢format格局多一些,感到更标准。
    format形式的底工用法就是用{0},{1}...来取代站位符,假若用{}代表行使暗许顺序,比如:
![](https://upload-images.jianshu.io/upload_images/6879662-9ba20d5a74127547.png)

format格式化.png



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



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

format格式化进阶.png

  不能够,将替换不了的空格ord()下才见到,这几个utf-8空格比较特别。ASCII 194 + 160出去的。

故此,对于华语字符串来讲,若是不期望把字符串编码格式转变成UTF-8格式的(比方原页面和指标页面包车型大巴charset是风流倜傥律的时候卡塔 尔(阿拉伯语:قطر‎,只须要采用escape。假使您的页面是GB2312只怕其余的编码,而选取参数的页面是UTF-8编码的,将在动用encodeU途观I或许encodeUENCOREIComponent。

本章目录


字符串能够说是持有形成语言中选取最分布的数据类型,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(chr(194) . chr(160), "-", $str);  // 解决方法
echo $str;  // OK

encodeU凯雷德I()方法:把U中华VI字符串接受UTF-8编码格式转产生escape格式的字符串。不会被此措施编码的字符:! @ # $& * ( ) = : / ; ? + '

字符串

字符串正是用单引号(')大概双引号("")包裹起来的文字,在Python风格标准里引入一个模块使用风华正茂种标记作为字符串表示。在字符串内能够选用其它后生可畏种引号, 以避免在字符串中应用。
例如:

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

结果为:

图片 1

String.png

之所以说,除非想在字符串内含有单引号可能双引号,每八个Python文件最好使用相通种标识。
对此单个字符的编码,Python提供了ord()函数获取字符的大背头表示,chr()函数把编码调换为相应的字符:

图片 2

ord和chr.png

如若知道字符的整数编码,还足以用十二进制这么写str(unicode情势卡塔尔国:

图片 3

uniode中文.png

风流倜傥旦要在互连网上传输,只怕封存到磁盘上,就供给把str变为以字节为单位的bytes。Python对bytes类型的数码用带b前缀的单引号或双引号表示:

var = b"ABC"

要专心区分'ABC'和b'ABC',前边贰个是str,后面一个尽管内容展现得和前面二个一样,但bytes的各种字符都只占用三个字节。
以Unicode表示的str通过encode()方法能够编码为内定的bytes,比方:

图片 4

encode.png

纯菲律宾语的str能够用ASCII编码为bytes,内容是千篇风度翩翩律的,含有汉语的str能够用UTF-8编码为bytes。含有普通话的str不可能用ASCII编码,因为中文编码的限制超过了ASCII编码的范围,Python会报错。
反过来,从bytes到str能够用decode方法,原理和操作都以均等的,不再赘述了。
末尾,能够看下len方法,len是length的缩写,翻译过来便是测算str可能bytes的字符字节数,举例:

图片 5

len.png

看得出,1个中文字符经过UTF-8编码后平日会据有3个字节,而1个波兰语字符只占用1个字节。
在操作字符串时,大家平日遇上str和bytes的竞相转变。为了防止乱码难点,应当始终百折不回接收UTF-8编码对str和bytes实行改变。
还会有任何一些常用的章程,如spli(分割卡塔 尔(阿拉伯语:قطر‎, join(拼接卡塔尔,replace(替换卡塔 尔(阿拉伯语:قطر‎,upper(大写卡塔 尔(阿拉伯语:قطر‎,lower(小写卡塔尔,strip(去除两端空格卡塔尔,lstrip(去除左端空格卡塔 尔(阿拉伯语:قطر‎,rstrip(去除右端空格卡塔 尔(阿拉伯语:قطر‎等,用法都比较轻易,可参看源码调用就能够。

  结果:为方便书写,|代表空格,|意味着全角空格。

java对文字进行编码涉及3个函数:escape,encodeUEvoqueI,encodeUWranglerIComponent,相应3个解码函数:unescape,decodeU奥迪Q5I,decodeU奥迪Q5IComponent

字符编码

计算机的本色实际上正是由0和1构成的,所以说不管普通话仍旧越南语字符串,最后都要改动为数字。
最先独有1二十八个字符被编码到计算机里,相当于深浅写土耳其共和国(The Republic of Turkey卡塔尔语字母、数字和一些符号,这一个编码表被称作ASCII编码。
而是要拍卖中文鲜明四个字节是相当不够的,起码必要多个字节,並且还无法和ASCII编码冲突,所以,中夏族民共和国拟订了GB2312编码,用来把中文编进去。
新生吗,为了管理越来越多的言语,Unicode应际而生。Unicode把全部语言都归拢到豆蔻梢头套编码里,那样就不会再有乱码难题了。
Python2.x层层便是用的ASCII编码,而Python3.x就从头利用unicode了,那样中文展现难点就有了一点都不小的修正。这里打字与印刷了眨眼之间间windows下Python3.6的各样编码:

图片 6

Python编码.png

能够看见,基本统风度翩翩为了utf-8。那么哪些是utf-8呢?utf-8其实是八个可变长编码。它把一个Unicode字符遵照差异的数字大小编码成1-6个字节,常用的立陶宛语字母被编码成1个字节,汉字日常是3个字节,独有很生分的字符才会被编码成4-6个字节。若是您要传输的文件饱含多量乌Crane语字符,用UTF-8编码就会节省空间:

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

从地点的报表还足以窥见,UTF-8编码有三个额外的补益,正是ASCII编码实际上能够被充任是UTF-8编码的风姿洒脱局地,所以,多量只扶持ASCII编码的历史遗留软件能够在UTF-8编码下持续做事。
在Computer内部存款和储蓄器中,统风姿浪漫使用Unicode编码,当需求保留到硬盘可能须求传输的时候,就退换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转移为Unicode字符到内存里,编辑完毕后,保存的时候再把Unicode转变为UTF-8保存到文件:

图片 7

image.png

    一遍坑爹的小bug。读取生龙活虎段文字(编码utf-8),想替换掉空格,str_replace(" "..)、preg_replace("/\s/"..)都不起作用。

4、  escape对0-255以外的unicode值进行编码时输出%u****格式,其余意况下escape,encodeU奔驰G级I,encodeU普拉多IComponent编码结果生龙活虎致。

  ||||####4####|--|####|--|

撤消的不二秘诀:
replace() 方法借使一贯用str.replace("-","!") 只会改变第二个门道非常的字符.
而str.replace(/\-/g,"!")则可以轮流掉全部十二分的字符(g为大局标识)。
replace()
js中替换字符变量如下:

 

java中的编码方法:
escape() 方法:选择ISO Latin字符集对点名的字符串举办编码。全部的空格符、标点符号、特殊字符以致别的非ASCII字符都将被转接成%xx格式的字符编码(xx等于该字符在字符集表里面包车型地铁编码的16进制数字卡塔 尔(英语:State of Qatar)。比方,空格符对应的编码是%20。unescape方法与此相反。不会被此办法编码的字符: @ * / +