Думаю, я нашел решение вашей проблемы. Хотя я не могу быть полностью уверен, это вызвано двумя причинами. Первый находится в атрибуте href
ссылки для скачивания. Проблема здесь в "
(двойные кавычки) в данных to_save
переменных. html, что я мог проверить с предоставленными вами данными, отображает его следующим образом:
<a href="data:text/plain;charset=UTF-8,b"UNA:+.? 'UNB+UNOC:3+9978715000006:14+9978715000006:14+200529:1139+50582307060_WP?+_200101_200201++TL'UNH+1+MSCONS:D:04B:UN:2.3'BGM+7+50582307060_WP?+_200101_200201-1+9'DTM+137:202005291139:203'RFF+Z13:13008'NAD+MS+9978715000006::9'CTA+IC+:Michael Jordan'COM+m.jordan@energycortex.com:EM'NAD+MR+9978715000006::9'"" download=filename.txt>Download File</a>
Как видите, значение атрибута href
не совсем синее цвет (здесь, в контейнере кода stackoverflow выше). Это из-за того, что строка "
прерывается, она закрывает ранее открытый "
после href="
. Чтобы предотвратить такое поведение, вы должны заменить "
в to_save
на "
. Для пользователя это будет выглядеть так же, как "
, но браузер будет рассматривать его как обычную строку.
Вы должны добавить следующую строку кода в ваш python скрипт, чтобы это произошло
to_save = abc.serialize().encode("ascii", "ignore")
#add this line:
to_save = to_save.replace('"','"')
Затем атрибут download
не имеет двойных кавычек вокруг его значения. Формально он должен выглядеть так: download="filename.txt". Then again, for safety replace any possible
"with
" `.
Полный код python теперь должен выглядеть так:
reference = 50582307060_WP+_200101_200201
reference = reference.replace('"','"')
to_save = abc.serialize().encode("ascii", "ignore")
to_save = to_save.replace('"','"')
href = f'<a href="data:text/plain;charset=UTF-8,{to_save}" download="{reference}.txt">Download File</a> (right-click and save as {reference}.txt)'
st.markdown(href, unsafe_allow_html=True)
Надеюсь, это поможет! Если нет, прокомментируйте.