TaggedNorth
@TaggedNorth
Начинающий программист

Как заменить все иероглифы в строке Python?

Доброго дня, пользователи habr. Столкнулся с такой проблемой, используя vk_api нужно загрузить документ .csv в сообщение бота, для этого приходится загружать файл сначала на сервер, однако VK ругается и не пропускает запрос на добавления файла, в котором содержатся азиатские иероглифы и плюется ошибкой

'charmap' codec can't decode byte 0x98 in position 254: character maps to

with open(FILE,'r',encoding='utf-8',newline='') as file:
                    reader = csv.reader(file, delimiter = ",")
                    data = list(reader)
                    row_count = len(data) - 1 
                print('Opening file!')
                document = open(FILE, 'r') # ФАЙЛ 
                print('Uploading file!')
                document_url = vk_session.method("docs.getMessagesUploadServer", {"type": "doc", "peer_id": userid}) #ЗАГРУЗКА ФАЙЛА НА СЕРВЕР
                print('Post!')
                try:
                    document_post = requests.post(document_url["upload_url"], files={"file":document}).json() #POST
                except Exception as exc:
                    print(f'{exc}')
                print('Saving file!')
                document_save = vk_session.method("docs.save", {"file": document_post["file"], "title":f"Search_{userid}"})#СОХРАНЕНИЕ ФАЙЛА
                document = document_save.get('doc')
                document_url = document['url']
                document_url = document_url[:document_url.find('?')] 
                #ОТПРАВКА СООБЩЕНИЯ
                print('Sending message')
                vk_session.method('messages.send', {'user_id': userid, "message":f'По вашему запросу найдено езультатов: {row_count} \n Просмотреть все в формате таблицы скачав документ по ссылке: {document_url}', 'random_id': 0, })


Существует ли способ, чтобы заменить все иероглифы, например, на символы '?'
Спасибо!
  • Вопрос задан
  • 363 просмотра
Пригласить эксперта
Ответы на вопрос 2
SoreMix
@SoreMix Куратор тега Python
yellow
Откройте, указав кодировку файла, как делали это в первой строке
Ответ написан
Нашел решение:
cjk_ranges = [
        ( 0x4E00,  0x62FF),
        ( 0x6300,  0x77FF),
        ( 0x7800,  0x8CFF),
        ( 0x8D00,  0x9FCC),
        ( 0x3400,  0x4DB5),
        (0x20000, 0x215FF),
        (0x21600, 0x230FF),
        (0x23100, 0x245FF),
        (0x24600, 0x260FF),
        (0x26100, 0x275FF),
        (0x27600, 0x290FF),
        (0x29100, 0x2A6DF),
        (0x2A700, 0x2B734),
        (0x2B740, 0x2B81D),
        (0x2B820, 0x2CEAF),
        (0x2CEB0, 0x2EBEF),
        (0x2F800, 0x2FA1F)
    ]

def is_cjk(char):
    char = ord(char)
    for bottom, top in cjk_ranges:
        if char >= bottom and char <= top:
            return True
    return False
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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