Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 14

Декодирование utf-8

12.07.2023, 01:40. Показов 1261. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.
Столкнулся со следующей проблемой:
Имею условную строку в виде \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c
в идеале необходимо преобразовать ее в "Добрый день"
Перекопал половину stackoverflow, нашел огромную массу вариантов преобразования, но ни один из них не работает,
как бы я не пытался, строка не изменяется совершенно никаким образом.

Для примера приведу несколько простых и не очень вариантов, которые уже использовал:

Python
1
2
3
4
s = '''\\xed\\xe5 \\xff?xb\\xff\\xe5\\xf2\\xf1\\xff \\xef\\xf0\\xe8\\xeb\\xee\\xe6\\xe5\\xed\\xe8\\xe5\\xec'''
 
s = s.encode().decode("utf-8")
print(s)
Python
1
2
from unidecode import unidecode
print(unidecode(s))
Пытался записать строку в файл и далее прочитать из файла через кодировку:

Python
1
2
3
with open('exam.txt', 'rb') as f:
    bs = f.read()
    print(bs.decode('utf-8'))
Результат все равно выходит в спецсимволах.

При всем при этом, если залезть в интернет, на любой из онлайн декодеров и там ввести эту строку, то все будет отлично, результат действительно будет "Добрый день", автоматический поиск кодировок покажет, что переводим из кодировки "unicode" в "utf-8"

При попытке передать кодировку "unicode":

Python
1
2
3
4
5
s = '''\\xed\\xe5 \\xff?xb\\xff\\xe5\\xf2\\xf1\\xff \\xef\\xf0\\xe8\\xeb\\xee\\xe6\\xe5\\xed\\xe8\\xe5\\xec'''
s = s.encode('unicode').decode("utf-8")
print(s)
 
>>>LookupError: unknown encoding: unicode
Кстати, возвращаясь к попыткам прочитать из файла, пробовал и такой вариант:

Python
1
2
3
import io
f = io.open("exam.txt", mode="r", encoding="utf-8")
print(f.read())
Собственно, как это бедствие преобразовать в обычную кириллицу?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.07.2023, 01:40
Ответы с готовыми решениями:

Декодирование строки
Здравствуйте. Есть сервер на питоне на http, и клиент. С клинта на сервер отправляется такая структура: JSON.stringify({ ...

Декодирование символов
Добрый день! Имеется следующая последовательность: cf f0 e8 e2 e5 f2 (Привет cp1251). Исходно получена из: \'cf\'f0\'e8\'e2\'e5\'f2...

Декодирование строки
На прошлой неделе мы сжимали строки, используя кодирование повторов. Теперь нашей задачей будет восстановление исходной строки обратно. ...

4
 Аватар для s_t_r_a_j
526 / 179 / 58
Регистрация: 12.02.2023
Сообщений: 641
12.07.2023, 08:27
Python
1
2
s = '\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c'
print(s)
Bash
1
Добрый день
в чем проблема?
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
12.07.2023, 09:44
Цитата Сообщение от s_t_r_a_j Посмотреть сообщение
в чем проблема?
это проблема "XY" (молотка)...

Цитата Сообщение от Satain Посмотреть сообщение
Столкнулся со следующей проблемой:
Имею условную строку в виде \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c
Вы не описали саму проблему X, то бишь, как именно Вы получаете строку и с какой целью пытаетесь её преобразовывать...

Но так, чтобы "кувалдой перешибить молоток" (решением проблемы Y), можно действовать следующим образом:
Python
1
2
3
s = '\\xed\\xe5 \\xff?xb\\xff\\xe5\\xf2\\xf1\\xff \\xef\\xf0\\xe8\\xeb\\xee\\xe6\\xe5\\xed\\xe8\\xe5\\xec'
res = s.encode('latin1').decode('unicode_escape').encode('latin1')
print(res.decode('cp1251')) #не я?xbяется приложением
1
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 14
12.07.2023, 14:26  [ТС]
В вашем конкретном случае все работает, похоже я совершенно не понимаю логику .encode.decode, если в ваше решение в строку s поставить мою строку, то я получаю:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-5: ordinal not in range(256)

В общем решением для себя на данный момент будет собственный декодер, может быть это и не совсем простое решение, но по крайней мере оно работает)

PS Вы правильно меня поняли, задача была, любым образом получить в консоли русские символы, а не закодированную строку на выходе.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,213
12.07.2023, 15:16
Цитата Сообщение от Satain Посмотреть сообщение
если в ваше решение в строку s поставить мою строку, то я получаю
Вопрос в том, ещё раз, какую именно строку Вы получаете и каким образом... от этого и будет зависеть то или иное решение.
Если речь об этой строке:
Цитата Сообщение от Satain Посмотреть сообщение
\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c
то это закодированный юникод, в формате с префиксом "\u"+ 4-6 символов кодировки юникода... такой набор в интерактивной консоли будет раскодирован автоматически, т.е. ввод строки:
'\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c'
приведет к автоматическому декодированию и выводу строки:
'Добрый день'

Если же речь об этой строке:
Цитата Сообщение от Satain Посмотреть сообщение
'\\xed\\xe5 \\xff?xb\\xff\\xe5\\xf2\\xf1\\xff \\xef\\xf0\\xe8\\xeb\\xee\\xe6\\xe5\\xed \\xe8\\xe5\\xec'
то это байтовая строка (с ошибочным набором символов), которая для декодирования должна иметь вид:
Python
1
b'\xed\xe5 \xff?xb\xff\xe5\xf2\xf1\xff \xef\xf0\xe8\xeb\xee\xe6\xe5\xed\xe8\xe5\xec'
- в этом случае, можно её декодировать так:
Python
1
b'\xed\xe5 \xff?xb\xff\xe5\xf2\xf1\xff \xef\xf0\xe8\xeb\xee\xe6\xe5\xed\xe8\xe5\xec'.decode('cp1251')
В общем, разберитесь, что откуда и в каком виде получаете, тогда и проблему будет решать проще...

Цитата Сообщение от Satain Посмотреть сообщение
похоже я совершенно не понимаю логику .encode.decode
для этого есть документация, почитайте, как работают эти методы...
в двух словах:
.encode() - возвращает байтовую строку в определенной кодировке
.decode() - возвращает строку из заданных байтов в определенной кодировке
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2023, 15:16
Помогаю со студенческими работами здесь

Декодирование hex и ascii
Добрый день! Получаю с весов по com порту RS232 данные...

Декодирование зашифрованной информации
Текст сначала перевели в ASCII код (основной текст и ключ), а затем сделали побитовую операцию XOR. После этого перевели обратно в символы....

Кодирование / декодирование текста
подскажите пожалуйста какой - то алгоритм(c открытым ключом ) с помощью которого можно кодировать/декодировать сообщения на русском то AES...

Декодирование данных после нормализации
Я делаю нормализацию данных: from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() train_data =...

Кодирование/декодирование данных шифром Цезаря
Здравствуйте! Помогите, пожалуйста, с решением одной любой из следующих задач! Программирование у меня не профилирующий предмет, и я в нём...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru