鱼C论坛

 找回密码
 立即注册
楼主: lzb1001

[已解决]关于转义符号\013

[复制链接]
发表于 2022-11-25 09:56:10 | 显示全部楼层
lzb1001 发表于 2022-11-25 09:26
还有下面这个,大神再看看,出自http://c.biancheng.net/view/4227.html

我看看?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 10:04:15 | 显示全部楼层
lzb1001 发表于 2022-11-25 09:26
还有下面这个,大神再看看,出自http://c.biancheng.net/view/4227.html

这应该是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-11-25 10:06:44 | 显示全部楼层


如何实现?以下方式1并没有实现,请大神指点

需要注意的是:由于Python 原始字符串中的反斜杠仍然会对引号进行转义,因此原始字符串的结尾处不能是反斜杠,否则字符串结尾处的引号会被转义,导致字符串不能正确结束。

例如想表示D:\Program Files\Python 3.8\,下面这样写都将返回语法错误的提示:

>>> str1 = 'D:\Program Files\Python 3.8\'
SyntaxError: EOL while scanning string literal
>>> str1 = r'D:\Program Files\Python 3.8\'
SyntaxError: EOL while scanning string literal

在 Python 中有两种方式解决这个问题:

方式1:不要使用原始字符串,改用长字符串的写法;

>>> str1 = '''D:\Program Files\Python 3.8\'''
(需重启IDLE!!!)
>>> str1 = '''
D:\Program Files\Python 3.8\
'''
>>> print(str1)

D:\Program Files\Python 3.8 # 返回结果缺结尾\

方式2:使用原始字符串,但单独书写反斜杠---这是接下来要重点说明的。

str1 = r'D:\Program Files\Python 3.8' '\\'
print(str1)

先写一个原始字符串r'D:\Program Files\Python 3.8',紧接着又使用'\\'写一个包含转义字符的普通字符串,
也可以这样写:

str1 = r'D:\Program Files\Python 3.8' + '\\'
print(str1)

Python 就自动将这两个字符串拼接在一起,所以上面两种代码输出的都是我们要的结果:

D:\Program Files\Python 3.8\
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-25 10:08:23 | 显示全部楼层
zhangjinxuan 发表于 2022-11-25 09:55
也不行,中间的:\\n 不能实现换行,只有 \n 才可以

对哦,我忘了必须\n才行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 10:25:56 | 显示全部楼层
阿奇_o 发表于 2022-11-24 21:47
准确来说,取决于 特定程序如何处理 \013  即 \r  这个"控制字符"。 当然这里的"程序"一般是操作系统的某个 ...

不对吧,你说的那个是 '\015' 那个才是 \r 呢,可以在交互模式输入 '\015'试试
\0开头的转义序列是 8进制数。

\r 的十进制 是 13
八进制是 015
十六进制是 0x0d
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-11-25 10:29:35 | 显示全部楼层
\013 是 字符 '\v' 英文是 vertical tab 直译过来是 垂直的制表符(垂直方向的Tab)
另外如果字符 有相应的转义符,推荐直接用转义符更加容易阅读。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 10:43:04 | 显示全部楼层
阿奇_o 发表于 2022-11-24 21:47
准确来说,取决于 特定程序如何处理 \013  即 \r  这个"控制字符"。 当然这里的"程序"一般是操作系统的某个 ...

\013 不是 \r,是 \v 哈,\0 开头表示后面的 13 是八进制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-11-25 10:44:03 | 显示全部楼层
lzb1001 发表于 2022-11-25 10:06
如何实现?以下方式1并没有实现,请大神指点

需要注意的是:由于Python 原始字符串中的反斜杠仍然会 ...

的确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 10:45:07 | 显示全部楼层
lzb1001 发表于 2022-11-25 10:06
如何实现?以下方式1并没有实现,请大神指点

需要注意的是:由于Python 原始字符串中的反斜杠仍然会 ...

'''D:\Program Files\Python 3.8\''' 是错的,因为一个 \ 把三引号的其一引号给“吃掉”了,导致三引号无法配对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 10:47:12 | 显示全部楼层
我自己测试中这个貌似只有类Unix终端实现了这个功能。Windows 10及其以上的系统可能也有,我不知道。我只知道Win10提升了 转义序列的能力,支持了好多ANSI 转义序列。

截图中的都是在 Windows 7 SP1 x64 系统中进行的测试

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 10:48:10 | 显示全部楼层
lzb1001 发表于 2022-11-25 10:06
如何实现?以下方式1并没有实现,请大神指点

需要注意的是:由于Python 原始字符串中的反斜杠仍然会 ...
str1 = '''
D:\Program Files\Python 3.8\
'''
这个 Python 解释器会把三引号中每行后的 \ 给吃掉,这是语法,没什么讲法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 10:49:14 | 显示全部楼层
lzb1001 发表于 2022-11-25 10:06
如何实现?以下方式1并没有实现,请大神指点

需要注意的是:由于Python 原始字符串中的反斜杠仍然会 ...

好了,三个问题了,可以最佳了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-25 11:13:57 | 显示全部楼层
zhangjinxuan 发表于 2022-11-25 10:49
好了,三个问题了,可以最佳了吗

方式1:不要使用原始字符串,改用长字符串的写法;

那长字符串的写法怎么实现呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-25 11:15:21 | 显示全部楼层
/r对应的应该是13吧,见下图

图片1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 11:15:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zhangjinxuan 于 2022-11-25 11:17 编辑
lzb1001 发表于 2022-11-25 11:13
方式1:不要使用原始字符串,改用长字符串的写法;

那长字符串的写法怎么实现呢?


长字符串就是三个单引号啊:
'''
C:\User\aaa\Desktop\
'''
不过这么写会把最后的 \ 吃掉

可以这样写:
'''
C:\User\aaa\Desktop\\
'''
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 11:16:45 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2022-11-25 11:20 编辑
lzb1001 发表于 2022-11-25 11:15
/r对应的应该是13吧,见下图


不可能啊,会 C++ 吗,你用 C++实现一下

'\013' 不可能是 '\r' 吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 11:32:11 | 显示全部楼层
现在好了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 11:32:21 | 显示全部楼层
lzb1001 发表于 2022-11-25 11:15
/r对应的应该是13吧,见下图

对啊,你看看那个表格,右上角写的什么(十进制)
但是你 \0开头的是8进制不冲突啊

\r == '\015' == 0o15 == 13 == 0x0D
不信试试 ord('\r') == ord('\013')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 11:35:58 | 显示全部楼层
lzb1001 发表于 2022-11-25 11:15
/r对应的应该是13吧,见下图

转义字符里边也没有十进制的啊。不信试试 '\010' 看看输出是不是 \x08
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-25 11:54:03 | 显示全部楼层
本帖最后由 lzb1001 于 2022-11-25 11:55 编辑
zhangjinxuan 发表于 2022-11-25 11:15
长字符串就是三个单引号啊:

不过这么写会把最后的 \ 吃掉

谢谢大神的解答

用长字符串的话,两种写法如下:

>>> str1 = '''D:\Program Files\Python 3.8\\'''
>>> str1
'D:\\Program Files\\Python 3.8\\'
>>> print(str1)
D:\Program Files\Python 3.8\

或:---注意:这种写法将产生上、下两行空行!!!

>>> str1 = '''
D:\Program Files\Python 3.8\\
'''
>>> str1
'\nD:\\Program Files\\Python 3.8\\\n'
>>> print(str1)

D:\Program Files\Python 3.8\

>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 16:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表