Как получить доступ к строке со смешанными 1-байтовыми и 2-байтовыми символами?

Я читаю вопросы и ответы для теста из файла в кодировке UTF-8, но ответ может состоять из 1 байтовых символов (английский) и 2 байтовых символов (русский) в одном и том же тексте:

"best car тайота"`

Мне нужно написать ответ, замененный на "*" так выглядит "**** *** ******" чтобы помочь угадать, что ответ. Для определения длины я использую

len(answer.decode('utf-8'))

Но в следующей подсказке, когда я хочу показать некоторые символы, такие как "b*s* ca* *а*от*"Я могу получить доступ к 1-байтовым символам через answer[index] но я не могу прочитать 2-байтовые символы таким образом, и поэтому я получаю "b*s* ca*" без 2-х байтовых символов.

Есть ли решение для этого?

1 ответ

Решение

Декодируйте строку в значение Unicode один раз и делайте в ней замену.

unicode строковый объект поддерживает те же операции, что и байтовые строки; просто будьте осторожны при смешивании байтовых строк и строк Unicode, так как это может вызвать автоматическое кодирование или декодирование (что приводит к UnicodeEncode или же UnicodeDecode ошибки). Печать строки должна автоматически кодировать значение в соответствии с вашим кодеком терминала.

Вы можете прочитать о Python и Unicode:

Другие вопросы по тегам