编码字符串中\x和%的区别?

来源:5-1 如何读写文本文件

惘玮

2017-08-24

中文字符:u"费玉清+-+夏之旅"

python   转码           u"费玉清+-+夏之旅".encode('utf8'):'

\xe8\xb4\xb9\xe7\x8e\x89\xe6\xb8\x85+-+\xe5\xa4\x8f\xe4\xb9\x8b\xe6\x97\x85'

javascript转码          encodeURI("费玉清+-+夏之旅")

"%E8%B4%B9%E7%8E%89%E6%B8%85+-+%E5%A4%8F%E4%B9%8B%E6%97%85"

======================================

只有%和\x不同,但是用下面的转码在python 中解码得不到汉字,这是为什么呢?


写回答

1回答

五羊司机

2017-12-02

一个汉字通过UTF-8编码为三个字节,例如‘费’的UTF-8编码为E8B4B9,其中E8、B4、B9分别代表一个字节的数据,它们都是用十六进制表示的(E8,即0xE8,转换为十进制为232)

在很多语言的字符串中'\'都是转义字符,python字符串中的'\x'表示后面的两个字符为十六进制,例如'\xe8'表示十六进制的E8,从而与字符串'e8'区分开来

在URL的规范中用%号表示转码,即%后面的两个字符为十六进制,JS的encodeURI编码也使用这种方式(大概是因为在URL中经常出现'\'符号,如果再用'\x'表示转码容易造成混淆。)

可以理解为在不同的语言或者场景中对编码使用了不同的标识符而已,你把"%E8%B4%B9"作为字符串输入给python,在字符串中'%'并不是转义字符,python只会把它当成一个普通的字符处理

0
0

Python高效编程技巧实战

精选50个Python案例,源自实战,全面提升Python编程能力

2582 学习 · 360 问题

查看课程