Печать символов, не входящих в ASCII 0-127 (Python 3) - PullRequest
0 голосов
/ 05 мая 2020

Итак, у меня есть алгоритм, по которому я беру символ, беру его код символа, увеличиваю этот код на переменную и затем печатаю этот новый символ. Однако я бы также хотел, чтобы он работал с символами, не входящими в стандартную таблицу ASCII. В настоящее время он не печатает «специальные» символы, такие как (например). Как я могу заставить его печатать определенные специальные символы?

#!/usr/bin/python3
# -*- coding: utf-8 -*-

def generateKey(name):

    i = 0
    result = ""

    for char in name:

        newOrd = ord(char) + i
        newChar = chr(newOrd)
        print(newChar)

        result += newChar

        i += 1

    print("Serial key for name: ", result)

generateKey(input("Enter name: "))

Каждый раз, когда я даю ввод, который заставляет специальные символы (например, |||||), он отлично работает для первых четырех символов (включая DEL, где он дает значок прозрачного прямоугольника), но пятый символ (обозначенный как ) также является символом ошибки, чего я не хочу. Как я могу это исправить?

Вот результат |||||:

Enter name: |||||
|
}
~


Serial key for name:  |}~

Но последний символ должен быть , а не пустым. (Кстати, четвертый символ, DEL, становится прозрачным прямоугольником, когда я копирую его в Windows)

1 Ответ

1 голос
/ 05 мая 2020

В кодировке по умолчанию (utf-8) chr(128) не является символом евро. Это управляющий персонаж. См. эту таблицу Unicode . На самом деле он должен быть пустым, а не .

Вы можете проверить кодировку по умолчанию с помощью sys.getdefaultencoding().

Если вы хотите переинтерпретировать chr(128) как символ евро, вам следует используйте кодировку windows-1252. Это действительно символ евро. (Различные кодировки расходятся во мнениях относительно того, как представлять значения за пределами ASCII 0–127.)

...