Странные символы, Python сказал TypeError: ord () ожидал символ, но найдена строка длиной X - PullRequest
0 голосов
/ 10 мая 2019

Я только что нашел набор странных символов, которых я никогда раньше не видел от кого-либо (https://paste.villavu.com/show/2991/) (символы разделяются пробелом). Этот человек сказал, что символ из этого набора символов может использоваться дляоставьте поле имени человека пустым в Twitch, Discord и т. д., чтобы он показывал, что у него нет имени.

Я попытался выяснить, что это за символы на самом деле, используя Python's ord(). Но яполучил TypeError: ord() expected a character, but string of length X found хотя я поставил только 1 символ для аргумента ord() и все вещи кажутся действительными.

Я беру символ из этого набора символов и пытаюсь вставить его в ord()

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

Затем я продолжил, предположив, что странный символ - это набор символов.

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

Из того, что я нашел, \ufeff - это знак порядка байтов (здесь * )). Но все же это не имеет смысла для меня, особенно о том, как эти символы могут быть упакованы вместе, так что кажется, что это всего лишь 1 символ из моего компьютера.

И почему некоторые платформы обрабатываютэто допустимое значение, например, для имени.

AnybОди может объяснить мне об этом, пожалуйста?

1 Ответ

2 голосов
/ 13 мая 2019

Помимо использования в качестве спецификации (уже упомянуто ), U + FEFF также является (устаревшим) ZWNBSP , поэтому его трудно обнаружить при выборе указателя.Поскольку он используется (или использовался) в работе с текстом, возможно принять его в имени пользователя, но, очевидно, такое использование может сбивать с толку (как для многих символов Юникода).

...