我在python中编写了一个自动化脚本,用于处理通过Telnet会话发送命令。出于某种原因,我无法让它发挥作用。经过大量令人沮丧的调试后,我发现当我翻译命令时:
"ulimit -s 1024"
在命令中 - 在utf-8中变得奇怪。我不得不用字节翻译它,因为我用Telnet发送它(我知道我应该使用ssh,但老实说我的情况很好)并且我意识到它很奇怪,因为当我以字节打印命令时它将是:< / p>
b"ulimit \x##\x##\x##s 1024"
我不记得确切的数字,但我通过复制并粘贴一个新的“ - ”来修复它,我在函数中使用了两行并且工作正常。
我从两行中复制并粘贴了部分,但我键入了ulimit -s部分。我也在使用IDLE
任何人都知道发生了什么事?
答案 0 :(得分:6)
您设法输入U+2013 EN DASH或U+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'
这两个人不是唯一可以混淆的人物;还有一些:
等
答案 1 :(得分:0)
任何人都知道发生了什么事?
我可以在这里看到两种可能性。一个是你无意中从网页或其他文件中复制粘贴了一行代码 - 其中 - 已被emdash替换(它通常发生在我的引号和印刷报价标志上),看起来像一个减号但是它是UTF8多字节序列。
另一个是,IDLE编辑器以某种方式实现了像Microsoft Word那样的“拼写检查”,它取代了(其中包括)带有排版引号的引号,带有省略号的三个连续点和带有emdashes的减号。这个可能是由一些错误键入的罕见按键组合触发的(例如,我有时在尝试输入时触发Windows 7屏幕放大镜,我认为是{符号 - 我的键盘上的< kbd> Shift AltGr [)。