解释为什么" - "不是" - "

Fly*_*ing 3 python python-idle

我在python中编写了一个自动化脚本,用于处理通过Telnet会话发送命令.出于某种原因,我无法让它发挥作用.经过大量令人沮丧的调试后,我发现当我翻译命令时:

"ulimit -s 1024"
Run Code Online (Sandbox Code Playgroud)

在命令中 - 在utf-8中变得奇怪.我不得不用字节翻译它,因为我是用Telnet发送它的(我知道我应该使用ssh,但老实说我的情况很好)并且我意识到它很奇怪,因为当我以字节打印命令时它将是:

b"ulimit \x##\x##\x##s 1024"
Run Code Online (Sandbox Code Playgroud)

我不记得确切的数字,但我通过复制并粘贴一个新的" - "来修复它,我在函数中使用了两行并且工作正常.

我从两行中复制并粘贴了部分,但是我键入了ulimit -s部分.我也在使用IDLE

谁知道发生了什么?

Mar*_*ers 6

你设法输入类似U + 2013 EN DASHU + 2014 EM DASH的东西,它们看起来很像ASCII字符U + 002D HYPHEN MINUS.

因为这些字符中的任何一个都不在基本的Latin-1字母表中,所以将其中一个编码为UTF-8会产生一个3字节的序列:

>>> print('\u2013')
–
>>> print('\u2013'.encode('utf8'))
b'\xe2\x80\x93'
>>> print('\u2014')
—
>>> print('\u2014'.encode('utf8'))
b'\xe2\x80\x94'
Run Code Online (Sandbox Code Playgroud)

这两个人不是唯一可以混淆的人物; 还有一些:

等等