UTF-8 Строковое декодирование в Python

В проекте мне нужен модуль PHP и Python (Python 3.5.2). А также конфигурационный файл, который используют оба модуля. Конфигуратор Python имеет проблемы с чтением специальных символов из конфигурационного файла, например, с измененной немецкой гласной (ä, ö, ü, например). Со стороны PHP я использую кодировку utf-8, чтобы обойти проблему:

    utf8_encode ("Köln") //result: Köln

Со стороны Python я попробовал функцию декодирования:

    "Köln".decode("utf-8", "strict")

Я ожидал результата «Köln», но только что получил результат «Köln» снова.
Что мне нужно сделать, чтобы расшифровать мою строку?

0

Решение

Попробуйте эти строки, добавленные в верхней части документа:

# -*- coding: latin-1 -*-
# Encoding schema https://www.python.org/dev/peps/pep-0263

Это может помочь вам, больше документации Вот

1

Другие решения

В таких случаях вы должны добавить #-*- coding: UTF-8 -*- в первой строке вашего .py файла.

0

В Python3 весь текст в Unicode. Поэтому я бы порекомендовал на вашей стороне PHP преобразовать строку в юникод (с выводом в виде u’K \ xf6ln ‘). После того, как вы это сделаете, вы можете преобразовать его обратно (вроде) в его первоначальную форму в Python, однако, измененный гласный будет уничтожен.

import unicodedata

unicodetext = u'K\xf6ln'
output = unicodedata.normalize('NFKD', unicodetext).encode('ascii', 'ignore')

Это выведет одинокий Кельн без довольно симпатичной мутации. Из моих исследований я не могу найти способ обойти это, но, пожалуйста, кто-нибудь, кто находит более подходящее решение, пожалуйста, прокомментируйте

0

Спасибо за все полезные ответы и комментарии. Я наконец-то получил следующее решение:

На стороне PHP я кодирую свою строку с помощью следующей команды:

$str = "path/to/file/Köln.jpg";
json_encode ($str, JSON_UNESCAPED_SLASHES);

В результате получается строка «путь / к / файлу / K \ u00f6ln.jpg», которая затем сохраняется в моем конфигурационном файле.
Модуль Python использует ConfigParser для чтения файла. Закодированная строка затем декодируется с помощью следующей команды:

str.encode('utf8').decode('utf8')

Результат снова «путь / к / файлу / Köln.jpg».

0
По вопросам рекламы [email protected]