解释为什么“-”不是“-”
Explain why "-" is not a "-"
我在 python 中编写了一个自动化脚本,用于处理通过 Telnet 会话发送命令。出于某种原因,我无法让它工作。经过大量令人沮丧的调试后,我发现在翻译命令时:
"ulimit -s 1024"
命令中的 - 在 utf-8 中变得很奇怪。我必须以字节为单位翻译它,因为我使用 Telnet 发送它(我知道我应该使用 ssh,但老实说,这对我来说很好)我意识到这很奇怪,因为当我以字节为单位打印命令时,它将是:
b"ulimit \x##\x##\x##s 1024"
我不记得确切的数字,但我通过复制并粘贴一个新的“-”修复了它,我在函数中使用了两行并且工作正常。
我复制并粘贴了两行以上的部分,但我输入了 ulimit -s 部分。我也在使用 IDLE
有人知道发生了什么吗?
您成功输入了类似 U+2013 EN DASH or an U+2014 EM DASH, which both look a lot like the ASCII character 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'
这两个不是唯一容易混淆的字符;还有几个:
- U+2010 HYPHEN - (UTF8: E2 80 90)
- U+2011 NON-BREAKING HYPHEN - (UTF8: E2 80 91)
- U+2012 FIGURE DASH ‒ (UTF8: E2 80 92)
- U+FE58 SMALL EM DASH ﹘ (UTF8: EF B9 98)
- U+FE63 SMALL HYPHEN-MINUS_(UTF8:EF B9 A3)
等等
Anyone know what happened?
这里我可以看出两种可能性。一个是您无意中从网页或其他文档中复制粘贴了一行代码,其中 - 已被 emdash 替换(它通常发生在我身上带有引号和印刷引号),它看起来像一个减号但是这是一个 UTF8 多字节序列。
另一个是 IDLE 编辑器以某种方式影响了 "spelling check",就像 Microsoft Word 一样,它用排版引号代替(除其他外)引号,用省略号代替三个连续的点,用长划线代替减号.这 可能 是由错误输入的一些罕见的击键组合触发的(例如,我有时会在尝试输入时触发 Windows 7 屏幕放大镜,我认为,一个 { 符号- 在我的键盘上是 Shift AltGr [).
我在 python 中编写了一个自动化脚本,用于处理通过 Telnet 会话发送命令。出于某种原因,我无法让它工作。经过大量令人沮丧的调试后,我发现在翻译命令时:
"ulimit -s 1024"
命令中的 - 在 utf-8 中变得很奇怪。我必须以字节为单位翻译它,因为我使用 Telnet 发送它(我知道我应该使用 ssh,但老实说,这对我来说很好)我意识到这很奇怪,因为当我以字节为单位打印命令时,它将是:
b"ulimit \x##\x##\x##s 1024"
我不记得确切的数字,但我通过复制并粘贴一个新的“-”修复了它,我在函数中使用了两行并且工作正常。
我复制并粘贴了两行以上的部分,但我输入了 ulimit -s 部分。我也在使用 IDLE
有人知道发生了什么吗?
您成功输入了类似 U+2013 EN DASH or an U+2014 EM DASH, which both look a lot like the ASCII character 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'
这两个不是唯一容易混淆的字符;还有几个:
- U+2010 HYPHEN - (UTF8: E2 80 90)
- U+2011 NON-BREAKING HYPHEN - (UTF8: E2 80 91)
- U+2012 FIGURE DASH ‒ (UTF8: E2 80 92)
- U+FE58 SMALL EM DASH ﹘ (UTF8: EF B9 98)
- U+FE63 SMALL HYPHEN-MINUS_(UTF8:EF B9 A3)
等等
Anyone know what happened?
这里我可以看出两种可能性。一个是您无意中从网页或其他文档中复制粘贴了一行代码,其中 - 已被 emdash 替换(它通常发生在我身上带有引号和印刷引号),它看起来像一个减号但是这是一个 UTF8 多字节序列。
另一个是 IDLE 编辑器以某种方式影响了 "spelling check",就像 Microsoft Word 一样,它用排版引号代替(除其他外)引号,用省略号代替三个连续的点,用长划线代替减号.这 可能 是由错误输入的一些罕见的击键组合触发的(例如,我有时会在尝试输入时触发 Windows 7 屏幕放大镜,我认为,一个 { 符号- 在我的键盘上是 Shift AltGr [).