TypeError: аргумент name () 1 должен быть символом юникода, а не str - PullRequest
0 голосов
/ 08 мая 2020

Привет, я пытаюсь использовать unicodedata в python 3.7 на Linux, но, к сожалению, это не удается. Любая помощь приветствуется.

Я искал net по той же проблеме, но не смог найти ни одной подсказки, которая указала бы мне в правильном направлении.

Моя проблема : Я использую unicodedata.name(string) и получаю ошибку TypeError: name() argument 1 must be a unicode character, not str.

Минимальный рабочий пример

#!/usr/bin/env python3

import re
import emoji
import unicodedata


def replace_emoji(document):
    emoji_all = emoji.EMOJI_ALIAS_UNICODE.items()
    emoji_items = []

    emoji_pattern = re.compile(u'|'.join(
        re.escape(u[1]) for u in emoji_all), flags=re.UNICODE)
    emoji_items = re.findall(emoji_pattern, document)

    for item in emoji_items:
        unicodes = []
        unicode_values = []

        for char in range(len(item)):
            if not len(item) > 1:
                unicodes.append(r'{:x}'.format(ord(item[char])).upper())

            unicode_values.append([hex(ord(x)) for x in item[char]][0])

        char_length = len(unicode_values)

        chars = [chr(int(u, 16)) for u in unicode_values]

        if char_length == 2:
            print(chars)

            value = u'\\U{:x}\\U{:x}'.format(
                ord(chars[0]), ord(chars[1])).upper()

            unicodedata.name(value)

    return document

Мой тестовый прогон

print(replace_emoji(u'?????????????????????????????'))

1 Ответ

2 голосов
/ 08 мая 2020

Я считаю, что вы можете рассматривать все символы эмодзи как обычные символы в python 3.

Невозможно проверить код банкомата, но я думаю, что это должно сработать.

import emoji
import unicodedata


def replace_emojis(document):
    emoji_chars = emoji.EMOJI_ALIAS_UNICODE.values()

    def _emoji(char):
        if char in emoji_chars:
            return unicodedata.name(char)

    return ''.join(_emoji(char) or char for char in document)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...