В проекте мне нужен модуль 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» снова.
Что мне нужно сделать, чтобы расшифровать мою строку?
Попробуйте эти строки, добавленные в верхней части документа:
# -*- coding: latin-1 -*-
# Encoding schema https://www.python.org/dev/peps/pep-0263
Это может помочь вам, больше документации Вот
В таких случаях вы должны добавить #-*- coding: UTF-8 -*-
в первой строке вашего .py файла.
В Python3 весь текст в Unicode. Поэтому я бы порекомендовал на вашей стороне PHP преобразовать строку в юникод (с выводом в виде u’K \ xf6ln ‘). После того, как вы это сделаете, вы можете преобразовать его обратно (вроде) в его первоначальную форму в Python, однако, измененный гласный будет уничтожен.
import unicodedata
unicodetext = u'K\xf6ln'
output = unicodedata.normalize('NFKD', unicodetext).encode('ascii', 'ignore')
Это выведет одинокий Кельн без довольно симпатичной мутации. Из моих исследований я не могу найти способ обойти это, но, пожалуйста, кто-нибудь, кто находит более подходящее решение, пожалуйста, прокомментируйте
Спасибо за все полезные ответы и комментарии. Я наконец-то получил следующее решение:
На стороне 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».