| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Общие вопросы > bin-ascii |
| Автор: YahоО 27.5.2023, 14:21 | ||
Помогите понять отчего произвольную бин-строку нельзя преобразовать в привычный текст, например строку состоящую из одних единиц "11111111111111111111111" |
| Автор: Oldshelf 27.5.2023, 15:25 | ||
Нашёл примеры похожего преобразования на PHP:
Тоже ничего дельного не выходит. Что-то на юникоде, вроде. Скорее всего, или нет подходящей кодировки или соответствующий шрифт не установлен. Ну и символов там может не быть, если мультибайтовая кодировка использует не весь диапазон доступных значений. А так должно быть в большинстве случаев: не может быть в разных языках одинаковое количество символов, совпадающее с максимальным значением байтов. В данном примере именно максимальные значения и получаются: единица в бинарном формате - наибольшая величина, а тут они идут подряд. Добавлено через 36 секунд + ссылка на пример кода: https://stackoverflow.com/questions/35536141/converting-binary-data-to-ascii-with-php-any-possibility |
| Автор: YahоО 27.5.2023, 16:33 |
| https://www.binaryhexconverter.com/binary-to-ascii-text-converter нормально так преобразовывает "1111111111111111111111111111111111111111" в какие то символы, пусть они не очень читаемые но все же символы, что как бы и требовалось, почти. Получается что все таки можно, хотя и не в python, или, что вероятнее, я просто не могу правильную универсальную функцию составить. Или "Для представления кодовых обозначений в виде байт, нужно как-то их закодировать." для строки из многих единичек не находится кода в кодировках. |
| Автор: Oldshelf 28.5.2023, 05:42 | ||
Да, на PHP получился тот же результат - с невалидными символами. Думал, что в вопросе подразумевается тот же результат: вместо текста абракадабра. Если нет даже такого результата, то, видимо, функция просто получает ошибку... Кажется, по-умолчанию там установлен параметр 'strict', то есть должна появляться ошибка UnicodeEncodeError. Можно попробовать указать вторым параметром 'ignore':
Вообще, причина явно в том, что для данного набора байтов нет символов на utf8 и функция не может вернуть корректный результат. |
| Автор: YahоО 28.5.2023, 12:28 |
| нет символов на utf8 - так что не стоит пытаться найти то чего нет. (utf не бесконечен) И это тоже хороший ответ, потому что в таком случае просто надо искать совершенно иное решение своих задач, не нуждающееся подобных преобразованиях и не натыкающееся на какие либо ограничения. Oldshelf, спасибо за участие в рассмотрении проблемы! |