奇怪的字符,Python表示TypeError:ord()需要一个字符,但找到了长度为X的字符串

时间:2019-05-10 18:51:48

标签: python character special-characters

我刚刚从某人(https://paste.villavu.com/show/2991/)中找到了一组我从未见过的奇怪字符(字符用空格隔开)。该人说,来自该字符集的一个字符可用于在Twitch,Discord等中将一个人的姓名字段留空,因此它们将像没有名字一样显示。

我试图通过使用Python的ord()来弄清楚这些字符的真正含义。但是我得到了TypeError: ord() expected a character, but string of length X found,尽管我只为ord()参数输入了1个字符,而且一切似乎都有效。

我要从该字符集中提取一个字符,并尝试将其放入ord()

>>> ord(' ')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 3 found

然后我继续假设奇怪的char是一组char。

>>> ' '[0]
'\ufeff'
>>> ' '[1]
' '
>>> ' '[2]
'\ufeff'

根据我发现的\ufeff是字节顺序标记(来自here)。但这对我来说还是没有意义的,尤其是关于那些字符如何打包在一起的问题,因此看起来就像我计算机中的一个字符一样。

以及为什么某些平台将其视为有效值(例如名称)。

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

除了用作BOM表(已经mentioned)之外,U + FEFF也是(已弃用的)ZWNBSP,这就是为什么很难通过指针选择来检测它的原因。由于已经(或已经)在运行文本中使用了它,因此可以在用户名中接受它,但这显然是令人困惑的(对于许多Unicode字符而言)。