精华内容
下载资源
问答
  • 大家在开发Python的过程中,一定会遇到很多反斜杠的问题,很多人被反斜杠的数量搞得头大。 首先我们写一段非常简单的Python代码,它的作用是把一个字段先转换为JSON格式的字符串,然后把这个字符串再转换为JSON格式...

    大家在开发Python的过程中,一定会遇到很多反斜杠的问题,很多人被反斜杠的数量搞得头大。

    首先我们写一段非常简单的Python代码,它的作用是把一个字段先转换为JSON格式的字符串,然后把这个字符串再转换为JSON格式的字符串:

    import json
    
    info = {'name': 'kingname', 'address': '杭州', 'salary': 99999}
    info_json = json.dumps(info)
    
    # 第一次转换以后,打印出来
    print(info_json)
    
    info_json_json = json.dumps(info_json)
    
    # 第二次转换以后,再打印出来
    print(info_json_json)
    

    它的运行效果如下图所示。

    图片

    第一次,字典转成JSON格式的字符串,只有中文杭州变成了Unicode编码\u676d\u5dde,其余地方没有出现反斜杠。

    在Python里面,反斜杠不能单独出现,这里\u676d\u5dde中的两根反斜杠,实际上应该是\u。表示这两个编码是Unicode编码。

    接下来,把第一次生成的JSON字符串:{"name": "kingname", "address": "\u676d\u5dde", "salary": 99999}再一次转成JSON格式的字符串,这一次变成了:

    "{\"name\": \"kingname\", \"address\": \"\\u676d\\u5dde\", \"salary\": 99999}"
    

    为什么突然出现了这么多反斜杠?这是因为,JSON格式的字符串本身是使用双引号来表示字符串的。如果原来的字符串里面本身就有双引号,那就会导致混淆。此时,Python需要把原来字符串的双引号变成普通的字符,失去双引号的作用。因此使用\"让双引号变成普通的字符。

    这就相当于在Python中,可以这样定义一个包含双引号的字符串:

    >>> a = "跟我说:\"你好\""
    >>> print(a)
    跟我说:"你好"
    

    这里,你好两侧的双引号都加上了反斜杠,让它成为普通的字符,防止它们提前与最外层的双引号配对。

    如果不加反斜杠,就会导致字符串里面的双引号提前与外层的双引号配对,引起语法错误:

    >>> b = "跟我说:"你好""
      File "<stdin>", line 1
        b = "跟我说:"你好""
                   ^
    SyntaxError: invalid syntax
    

    这里,"跟我说:"成为了一个字符串,末尾的""成为了一个空字符串。那么中间的你好就变成了一个没有定义的变量。而Python里面,是不存在字符串未定义的变量字符串这种写法的,所以会报语法错误。

    而JSON格式的字符串,本质上也是字符串,所以自然而然也需要遵循这样的规则。因此,字符串原来自带的双引号左侧就被加上了反斜杠。

    那么,原来的\u676d\u5dde为什么变成了\\u676d\\u5dde

    这是因为,当第二次执行json.dumps的时候,传入的参数是一个JSON格式的字符串,本质就是字符串。而一个字符串里面如果自带反斜杠,那么JSON在对他再次转换的时候,需要标记这是一个普通的字符串形式的反斜杠,不是一个有特殊意义的反斜杠,所以使用\\表示一个普通的反斜杠。

    好了,那么你可以猜一下,如果把info_json_jsonjson.dumps一下会怎么样?

    会变成:

    "\"{\\\"name\\\": \\\"kingname\\\", \\\"address\\\": \\\"\\\\u676d\\\\u5dde\\\", \\\"salary\\\": 99999}\""
    

    为什么出现了三个反斜杠连用和四个反斜杠连用的问题?

    实际上非常简单,当你对info_json_json执行json.dumps的时候,Python是怎么转换的?

    我们来看:

    "{\"name\": \"kingname\", \"address\": \"\\u676d\\u5dde\", \"salary\": 99999}"
    

    字符串执行json.dumps的时候,记住一个关键方法——从左到右,一个字符一个字符的转换。

    1. 第一个字符是双引号,所以变成\"
    2. 第二个字符是{,不是特殊符号,保留
    3. 第三个字符是\,把它变成\\
    4. 第四个字符是",把它变成\"
    5. ……
    

    全部执行完成了,由于这次转换是把一个字符串转换为JSON格式的字符串,所以最外侧加上双引号。

    于是就得到了:

    "\"{\\\"name\\\": \\\"kingname\\\", \\\"address\\\": \\\"\\\\u676d\\\\u5dde\\\", \\\"salary\\\": 99999}\""
    

    我们在爬虫开发过程中,可能会遇到上面这种经过多次JSON转换后的字符串,此时,千万不要轻易使用字符串的.replace方法把多个反斜杠替换为空或者把两个反斜杠替换为一个反斜杠。那样做只会导致你的数据更难解析。

    正确的做法应该是尝试对数据一层一层使用json.loads,把它一层一层还原,还原到最初的{'name': 'kingname', 'address': '杭州', 'salary': 99999}这种简单形式。

    好了,今天的介绍就到这里,最后留一个思考题:

    还是上面的代码,现在把PyCharm的调试模式打开,然后数一数info_jsoninfo_json_json里面反斜杠的个数,如下图所示:

    图片

    为什么在info_json里面,出现了\\u676d\\u5dde,为什么在info_json_json里面双引号前是两根反斜杠,而\"\\u676d\\u5dde\"竟然变成了\\"\\\\u676d\\\\u5dde

    展开全文
  • 这样是打印不出来的 这样就可以!

    在这里插入图片描述
    这样是打印不出来的

    在这里插入图片描述
    这样就可以!
    在这里插入图片描述

    展开全文
  • 反斜杠

    千次阅读 2020-12-23 05:45:35
    网友NO.787740Java中转义字符反斜杠╲的代替方法及repalceAll用法分析一、需求 现有一个字符串str String str = {\\\name\\\:\\\spy\\\,\\\id\\\\:\\\123456\\\};System.out.println(str = + str); 在控制台的输出为...

    网友NO.787740

    Java中转义字符反斜杠╲的代替方法及repalceAll用法分析

    一、需求 现有一个字符串str String str = {\\\name\\\:\\\spy\\\,\\\id\\\\:\\\123456\\\};System.out.println(str = + str); 在控制台的输出为: str = {\name\:\spy\,\id\:\123456\} 目标:将str转化为标准的json格式串str1,以调用JsonUtil的方法,将字符串转为map。即目标str1为: str1 = {name:spy,id:123456} 二、实现方法 1. 使用 StringEscapeUtils中的转义与反转义 apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils。利用它可方便地进行html、xml、java等的转义与反转义。 String str = {\\\name\\\:\\\spy\\\,\\\id\\\\:\\\123456\\\};System.out.println(原始 str = + str);String str1 = StringEscapeUtils.unescapeJava(str);System.out.println(目标 str1 = + str1);//对应方法的StringEscapeUtils.escapeJava(str1);//可将str1转义回str 控制台输出: 原始 str = {\name\:\spy\,\id\:\123456\} 目标 str1 = {name:spy,id:123456} 2. 使用Java的replaceAll方法……

    展开全文
  • 反斜杠 backslash在windows系统中用来表示目录。而在unix系统中,/ 表示目录。由于web遵循unix命名,所以在网址(URL)中,/表示目录。UNIX 操作系统设计了这种路径分隔法,它使用斜杠:/。由于网络是首先应用在 UNIX...

    斜杠

    正斜杠 / slash

    表示除法,分隔。在windows系统中通常用来分隔命令行参数,/ 表示选项等。不能作为文件名。

    反斜杠 backslash

    在windows系统中用来表示目录。

    而在unix系统中,/ 表示目录。由于web遵循unix命名,所以在网址(URL)中,/

    表示目录。

    UNIX 操作系统设计了这种路径分隔法,它使用斜杠:/。由于网络是首先应用在 UNIX

    计算机之间的,至今为止,一半以上的网络服务器仍是使用 UNIX

    操作系统的,所以网址也沿用了斜杠作路径分隔符。

    微软在开发 DOS 2.0 的时候,从 UNIX 中借鉴了这种目录结构,但由于 DOS

    中,斜杠已经用来作为命令行参数的标志了(UNIX 中用的是“ - ”符),所以只得使用反斜杠:

    到了 Windows

    时代,很多时候已经没有命令行参数的干扰,加上网络使用的扩展,现在斜杠和反斜杠大多时候可以互换,没有什么影响。

    在互联网世界中,斜杠“/”是很常见的一个符号。它的位置在右 Shift 的左边,不用按 Shift 就能够输入。

    斜杠之所以占据那么重要的地位,应该得益于操作系统(Unix、Dos)的流行。在命令行中,一个斜杠往往是表示着根目录,也作为目录与目录之间的分割。

    其实到了互联网时代,除了 URL

    中可能要用到斜杠外,其他地方很少见到它的身影。但它并没有随着历史而去。编程中,经常用到“/”和“”。在程序中,有时我们会看到这样的路径写法,"D:\Driver\Lan"

    也就是两个反斜杠来分隔路径。事实上,上面这个路径可以用 "D:/Driver/Lan"

    来代替,不会出错。但是写成了"D:DriverLan"就可能会出现错误。至于出现错误的原因,还要从字符串解析这方面来分析。学过编程的人都知道,在C里面,输入字符串时,如果想输入一个换行,那就要加上'n'这个标志,输出一个TAB

    就要加上 't',反斜杠('')这个符号会把跟在它后面的字符串结合起来转义成其它字符。根据这个原理,如果想输出双引号(' "

    ')就要输入' " ',才能将包含了双引号的字符正确的写入到内存中。要想输入一个反斜杠的话,只有敲' \

    '了。这就是前面为什么会用两个反斜杠来分隔路径的原因。如果将"D:DriverLan"这个路径字符串交给C编译器编译,实际上写入内存的字符串并没有包含反斜杠"",甚至跟在它后面的字母也会一起被转义成了其它的字符。字符串解析不仅仅局限于C编译器,Java编译器、一些配置文件的解析、WEB服务器等等,都会遇到这个问题。

    //

    //

    正斜杠(左斜杠),符号是"/";反斜杠(右斜杠),符号是""。

    在Unix/Linux中,路径的分隔采用正斜杠"/",比如"/home/hutaow";而在Windows中,路径分隔采用反斜杠"",比如"C:WindowsSystem"。

    有时我们会看到这样的路径写法,"C:\Windows\System",也就是用两个反斜杠来分隔路径,这种写法在网络应用或编程中经常看到,事实上,上面这个路径可以用"C:/Windows/System"来代替,不会出错。但是如果写成了"C:WindowsSystem",那就可能会出现各种奇怪的错误了。

    至于上述问题出现的原因,要从字符串解析这方面来分析。

    学过编程的人都应该知道,在C里面,输出字符串时,如果想输出一个换行,那就要加上'n'这个标志,类似的,输出一个TAB,就加上't',也就是说,反斜杠("")这个符号会把跟在它后面的字符结合起来转义成其它字符。根据这个原理,如果想输出双引号('"'),就需要输入'"',这样才会将包含了双引号的字符串正确的写入内存中。那么如果想输入一个反斜杠呢?很简单,只要敲'\'就可以了。

    看到这里或许有些人已经看出眉目了,如果"C:WindowsSystem"这个路径字符串交给C编译器编译,实际写入内存的字符串并没有包含反斜杠"",甚至紧跟在反斜杠后面的字母也一起被转义成了其它的字符,再次调用的话势必会出问题。

    字符串解析不仅仅局限于C编译器,Java编译器、一些配置文件的解析、Web服务器等等,都会遇到对字符串进行解析的这个问题,由于传统的Windows采用的是单个斜杠的路径分隔形式,导致在对文件路径进行解析的时候可能发生不必要的错误,所以就出现了用双反斜杠"\"分隔路径的形式。不管解析引擎是否将反斜杠解析成转义字符,最终在内存中得到的都是"",结果也就不会出问题了。

    由此也可以看出Windows或者说DOS在设计初期考虑不够周全,为了和Unix一些特征区别开来,将Unix中的正斜杠"/"分隔路径方式改变成了反斜杠""。这样改变导致的一个问题就是在早期DOS命令行中,正常的文件名是不能包含空格的,如果包含了空格,会导致输入这样的文件名时,命令解析无法将其和参数区分开。例如,想要进入"hutaow

    yuan"这个目录(在此先忽略8.3命名规则),直接输入"cd hutaow

    yuan",命令行会将其解析为进入"hutaow"目录,而后面的"yuan"做参数,这显然不是所期望的。

    而在Unix中,文件名如果包含空格,可以直接在空格前加上反斜杠""进行转义,从而很好的和命令参数区别出来(参数之间一般使用空格分隔)。还是上面的例子,在Unix中,只要输入"cd

    hutaow yuan"(在yuan前面的空格前加上""),命令行会正确的辨认出"hutaow

    yuan"并进入这个目录。

    当然,现在Windows的后续版本已经使用其它方法(比如文件名用双引号括住)解决了空格问题。

    /

    /

    C语言常用转义字符表

    转义字符

    含义

    ASCII码(16/10进制)

    o

    空字符(NULL)

    00H/0

    n

    换行符(LF)

    0AH/10

    r

    回车符(CR)

    0DH/13

    t

    水平制表符(HT)

    09H/9

    v

    垂直制表(VT)

    0B/11

    a

    响铃(BEL)

    07/7

    b

    退格符(BS)

    08H/8

    f

    换页符(FF)

    0CH/12

    单引号

    27H/39

    双引号

    22H/34

    \

    反斜杠

    5CH/92

    ?

    问号字符

    3F/63

    ddd

    任意字符

    三位八进制

    xhh

    任意字符

    二位十六进制

    字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都必须使用转义字符表示,即在这些字符前加上反斜杠。在C程序中使用转义字符d d d或者x h

    h可以方便灵活地表示任意字符。d d

    d为斜杠后面跟三位八进制数,该三位八进制数的值即为对应的八进制A S C I

    I码值。x后面跟两位十六进制数,该两位十六进制数为对应字符的十六进制A S C

    I I码值。使用转义字符时需要注意以下问题:1) 转义字符中只能使用小写字母,每个转义字符只能看作一个字符。2) v 垂直制表和f

    换页符对屏幕没有任何影响,但会影响打印机执行响应操作。3) 在C程序中,使用不可打印字符时,通常用转义字符表示4)n其实应该叫回车换行。换行只是换一行,不改变光标的横坐标;回车只是回到行首,不改变光标的纵坐标。

    5)t 光标向前移动四格或八格,可以在编译器里设置。

    6)' 在字符里(即单引号里)使用。在字符串里(即双引号里)不需要,只要用 '

    即可。

    7)? 其实不必要。只要用 ? 就可以了(在windows VC6

    和tc2 中验证)。

    展开全文
  • 反斜杠不能输入 1.小键盘不能使用 小键盘不能使用是我们xshell设置的问题,下面以图文的方式进行更改介绍 2.反斜杠不能输入 我遇到的是反斜杠不能输入,如果有其它键不能输入,不妨按照我这个方法试一试 ...
  • MySQL中如何插入反斜杠反斜杠被吃掉,反斜杠转义问题描述:mysql中带有反斜杠的内容入库后,发现反斜杠无故失踪了(俗话说被吃掉了)例:插入insert into tb(‘url‘) values(‘absc\eeee‘); 结果数据库里的内容是...
  • 首先,在c语言中,正斜杠/ slash 表示除法反斜杠\ backslash ,\用于转义字符,\n、\0。其次,UNIX 操作系统设计了这种路径分隔法,它使用正斜杠:/。由于网络是首先应用在 UNIX 计算机之间的,至今为止,一半以上的...
  • 2、反斜杠,转发请求的路径会将收到的请求原封不动的转发 实例 请求路径 http://192.168.88.128:123/api/login 1、带反斜杠 server { listen 123; server_name 192.168.88.128; location /api/ { proxy_...
  • 特殊字符反斜杠\

    2021-05-26 09:15:45
    特殊字符——反斜杠(\)在字符常量中,反斜杠(\)是一个特殊的字符,被称为转义字符,它的作用是用来转义后面一个字符。转义后的字符通常用于表示一个可见的字符或具有特殊含义的字符,例如换行(\n)。下面列出一些常见的...
  • I have a string "\\u003c", which belongs to UTF-8 charset. I am unable to decode it to unicode because of the presence of double backslashes. How do i get "\u003c" from "\\u003c"? I am using java.I tr...
  • php输出反斜杠的实例方法按常规写法,我们要输出反斜杠,那就在输出字符串里直接...所以我们要输出这个反斜杠,就需要再加上一个反斜杠才行,第一个反斜杠是转义用的,第二个反斜杠才是真实的输出字符串。再次运行上...
  • python如何输出反斜杠

    千次阅读 2021-01-14 19:47:27
    我尝试用字符串的 replace ,可是a.replace('\\', '\')会因为反斜杠把单引号转义了而找到字符串结束符报错,用a.replace(r'\\', r'\')也不行。 有什么好方法可以助我目标达成吗? >>> name = '\u5feb\u901f\u4e0a...
  • php反斜杠转义

    2021-04-14 10:48:32
    _而%不是通配符在MySQL一般,而且应该被转义,将它们放入普通的字符串字面量的目的。mysql_real_escape_string是正确的,足以满足此目的。addcslashes应该使用。_并且%仅在LIKE-matching 上下文中是特殊的。当您...
  • python的原生字符串能以反斜杠结尾的问题 Python的原生字符串(raw string)是个很有用的东西,可以少写很多反斜线(转义符号)。 不过它有个著名的bug,就是能以反斜线结尾,这让人很无语。首先要澄清的是不是能...
  • 这时候就可以用stripslashes() 函数删除自动添加的反斜杠。用法就是:比如包含字符串的变量是$str,那么就用stripslashes() 函数处理一下这个字符串:stripslashes($str),输出的结果就是去掉反斜杠的。如果遇到输出...
  • 这MySQL里的反斜杠(\\)也太坑了吧!!真是醉了

    千次阅读 多人点赞 2021-05-26 16:38:53
    在MySQL中有很多特殊符号都是相当恶心的,比如字符串中有反斜杠、单引号、双引号等,在我们平时操作SQL中,一注意这些符号就会给你背上一口锅。废话多说,快上车!
  • Python双反斜杠issu

    2020-12-28 19:59:11
    在 双反斜杠作为双反斜杠传递到数据库,而不是神奇地转换为单个反斜杠。我显然允许用正斜杠作为替代。有没有其他方法可以在我这边得到想要的反斜杠?或者,SQL server实例的管理员是否必须在其末端进行更改?在 ...
  • Java 反斜杠如何转义的问题

    千次阅读 2021-03-16 13:52:07
    引用说明:有正斜杠与反斜杠之分,正斜杠,一般就叫做斜杠,符号为“/”;反斜杠的符号为“\”引用斜杠(/)在JAVA中没有什么特别的意义,就是代表一个字符‘/’;反斜杠(\)则不然,它和紧跟着它的那个字符构成转义字符...
  • java反斜杠\的用法

    千次阅读 2021-03-03 14:29:22
    java反斜杠\的用法比较怪异,分为两种场景:1. 正则表达式匹配点(.) 或{、[、(、?、$、^ 、+和 * 这些特殊符号要要前加双斜框,表示字符类的时候也是用双斜杠譬如(\\s[空白符], \\S, \\d, \\D, \\w, \\W),匹配 \ 时...
  • I have a string. In that string are double backslashes. I want to replace the double backslashes with single backslashes, so that unicode char codes can be parsed correctly.(Pdb) p fetched_page'Chapte...
  • java反斜杠替换

    2021-03-09 09:05:46
    java replaceAll() 方法要用 4 个反斜杠,表示一个反斜杠例如 str1="aa\bbb"; str2="aa'bbb";要想替换成 str1="aa\\bbb";str2="aa\'bbb";必须这样替换:str1 = str1.replaceAll("\\\\", "\\\\\\\\");str2 = str2....
  • 顾名思义 , 就是给引号加上反斜杠 . 如 $eg = addslashes(" 单引号 ' 示例 "); mud ( 你看到我中 ......) 于 Sat Aug 2 20:56:42 2003) 提到: 如果传过来这样一个字符串 C:/Windows/a.txt 而 PHP 对于 / ...
  • 首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在WindowsC:\\Users\\Admin\\Desktop\\菜单地址(一)目录中的斜杠们python...
  • HiI have read articles related converting backward to forward slashes.But sol was to use raw string.But Problem in my case is :I will get file path dynamically to a variablevar='C:\dummy_folder\a.txt'...
  • 在JavaScript中,反斜杠在字符串文字和正则表达式中都有特殊含义。如果你想在字符串或正则表达式中使用实际的反斜杠,你必须写两个:\\。这个字符串以一个反斜杠开头,你在文字中看到的第一个是一个转义字符,告诉...
  • 首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows(一)目录中的斜杠们python读文件需要输入的目录参数,列出以下...
  • 对整个字符串使用格式:print("You entered %.1f\" which converts into ""%.2fm." % (imp_height_flt, imp_height_converted))或者告诉print()函数不要...在注意,第一行末尾的反斜杠根本需要,因为(..)圆括号...
  • 今天在检查home目录时发现有一个名为“\”的文件,觉得很奇怪,从来没见过,就准备用Vim打开看看,很自然地输入命令查看一下,结果居然打不开。ubuntu@ubuntu:~$ vi \>ubuntu@ubuntu:~$稍微思考了一下就明白了,...
  • 1) 用在宏定义中:#define CV_ARE_SIZES_EQ(mat1, mat2) \((mat1)->...cols)2) 用在printf中,有时候printf中语句太长,需要切分,则需用到反斜杠;3) 用“//”只能注释当前行的语句,想要将下一行一起注释掉...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,391
精华内容 53,356
关键字:

反斜杠打不出来