Специальные символы печатаются только как часть строки, но не независимо (python3)

Я оставил несколько комментариев здесь и там. Благодаря слабой типизации функции типа empty и isset имеют тенденцию быть ненадежными. Самый быстрый способ проверить, является ли параметр int или нет IMO, будет следующим:

if (array_key_exists('page',$_GET) && ($_GET['page'] == (int) $_GET['page']))

Приведение к int, а затем сравнение соответствующих значений вернет true только тогда, когда $_GET['page'] - действительный int. Если вы хотите использовать строгое сравнение типов по какой-либо причине (некоторые делают), вы можете выполнить двойное нажатие:

if (array_key_exists('page',$_GET) && ($_GET['page'] === (string)((int) $_GET['page'])))

Но в этом конкретном случае я не могу понять, почему вы хотели бы сделать это

1
задан user1767774 17 January 2019 в 13:04
поделиться

2 ответа

Как отмечается в комментарии, проблема печати, скорее всего, связана с тем, как ваш терминал обрабатывает отображение символов Юникода. Вы можете проверить, соответствует ли символ ожидаемому, кодируя его в utf-8 байтов или используя встроенный ord() .

Для заданной строки, представляющей один символ Unicode, вернуть целое число, представляющее кодовую точку Unicode для этого символа. Например, ord ('a') возвращает целое число 97, а ord ('€') (знак евро) возвращает 8364. Это обратное значение для chr () .

Например,

Python 3.7.1 (default, Oct 23 2018, 19:19:42)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.1.1 -- An enhanced Interactive Python. Type '?' for help.

IIn [1]: s = "ˈtau̯rum"                                                                                                 

In [2]: print(s)
ˈtau̯rum

In [3]: for c in s:
   ...:     print(c, c.encode('utf-8'), ord(c))
   ...:
ˈ b'\xcb\x88' 712
t b't' 116
a b'a' 97
u b'u' 117
̯  b'\xcc\xaf' 815
r b'r' 114
u b'u' 117
m b'm' 109
0
ответ дан Andrew F 17 January 2019 в 13:04
поделиться

Вы можете использовать этот код:

import unicodedata
s = "ˈtau̯rum" 

a = ""
for c in s:
    if unicodedata.combining(c):
        a += c
    else:
        print(a)
        a = c
else:
    print(a)

Таким образом, вы комбинируете комбинирующие символы. Вы можете заменить print(a) хранилищем кодов, которые должны храниться вместе.

0
ответ дан Giacomo Catenazzi 17 January 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: