Как декодировать utf-8 в php из кодировки utf-8 python?

Это код на питоне

значение.py

print('Print 😀 Smile 🥇 2nd Best Private'.encode('utf-8'))
# b'Print \xf0\x9f\x98\x80 Smile \xf0\x9f\xa5\x87 2nd Best Private'

значение.php

#get value from value.py
$bio=rtrim(ltrim($temp[2]));
$bio = preg_replace("/U\+([0-9a-f]{4,5})/mi", '&#x${1}', $bio);
echo ($bio);

echo($bio);
//output = \xf0\x9f\x98\x80 Smile \xf0\x9f\xa5\x87 2nd Best Private'

Ваше регулярное выражение ищет «U +», которого нет нигде в вашем вводе. Я предполагаю, что вы скопировали это откуда-то, не пытаясь понять это.

IMSoP 09.04.2022 12:07

Конструкция print('some string'.encode('utf8')) полезна для проверки строковых значений, но это не удобный формат обмена (поскольку это представление, специфичное для Python, и его нелегко преобразовать обратно, особенно на другом языке программирования). Вместо этого запишите закодированные байты в двоичный (не текстовый) дескриптор файла или используйте JSON.

lenz 09.04.2022 12:37
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Что нового в PHP 8.1?
Что нового в PHP 8.1?
Если вы все еще используете PHP 7, то эта статья для вас. В PHP 8, а именно в PHP 8.1, встроены некоторые очень востребованные функции, которые вам...
Разработка LMS на заказ для повышения эффективности работы и обучения
Разработка LMS на заказ для повышения эффективности работы и обучения
За последние годы в образовании произошла большая революция, и сегодня почти все учебные заведения делают упор на эксклюзивное управление учебным...
1
2
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот мой подход наивный (реализованный в Windows).

Скрипты:

type .\SO\71805811.py
# -*- coding: utf-8 -*-

print('Print 😀 Smile 🥇 2nd Best Private'.encode('utf-8'))
type .\SO\71805811.php
<?php
var_dump($argn);
$pattern = '(\\\\x(?=[0-9A-Fa-f]{2}))';
//                ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  positive lookahead assertion
$replacement = '=';
$encoded = preg_replace($pattern, $replacement, $argn);
var_dump(quoted_printable_decode($encoded));
?>

Выход:

.\SO\71805811.py
b'Print \xf0\x9f\x98\x80 Smile \xf0\x9f\xa5\x87 2nd Best Private'
.\SO\71805811.py | \php8\php.exe -F .\SO\71805811.php
string(65) "b'Print \xf0\x9f\x98\x80 Smile \xf0\x9f\xa5\x87 2nd Best Private'"
string(41) "b'Print 😀 Smile 🥇 2nd Best Private'"

Разве класс символов в прогнозе не должен быть [0-9A-Fa-f]? В конце концов, это шестнадцатеричные числа.

lenz 09.04.2022 22:19

@lenz ты прав; исправлен код.

JosefZ 10.04.2022 10:07

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

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

Использование CountVectorizer с Pipeline и ColumnTransformer и получение AttributeError: объект 'numpy.ndarray' не имеет атрибута 'ниже'
Почему мой альтернативный метод замены строки не работает?
Как скопировать файл с одного пути на другой, если путь существует только
Как отфильтровать и удалить строку на основе последнего условия максимальной даты в порядке убывания для цикла в python
Как отправить комментарий к сообщению на моей странице в Facebook с помощью графического API?
Улучшение медианного фильтра для обработки изображений с сильным импульсным (соль и перец) шумом
Как извлечь значения из списка с разным количеством скобок?
Замените строки, заключенные в кавычки, символами подчеркивания той же длины.
Рисование замкнутого цикла с Altair mark_line без повторения данных
Как написать функцию, которая принимает список в качестве аргумента и возвращает сумму значений в списке?