UTF-8 Python中的字符串解码

时间:2017-06-03 14:54:39

标签: php python python-3.x utf-8 configparser

在一个项目中,我需要一个PHP和一个Python模块(Python 3.5.2)。以及两个模块使用的配置文件。 Python configparser在从配置文件中读取特殊字符时遇到问题,例如德语变异元音(ä,ö,ü等)。从PHP方面我使用utf-8编码来绕过这个问题:

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

从Python端我尝试了解码功能:

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

我期待结果“Köln”,但又得到了结果“Köln”。 我该怎么办才能解码我的字符串?

4 个答案:

答案 0 :(得分:1)

尝试在文档顶部添加这些行:

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

这可能对您有所帮助,更多文档here

答案 1 :(得分:0)

在这种情况下,您应该在.py文件的第一行添加#-*- coding: UTF-8 -*-

答案 2 :(得分:0)

在Python3中,所有文本都是unicode。因此,我建议您在PHP端将字符串转换为unicode(输出为u' K \ xf6ln')。完成此操作后,您可以将其转换为(在某种程度上)它在Python中的原始形式,但是,变异的元音将被销毁。

import unicodedata

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

这将输出一个孤独的Koln,没有相当漂亮的突变。根据我的研究,我无法找到解决方法,但是,请找到更合适的解决方案的任何人请发表评论

答案 3 :(得分:0)

感谢所有有用的答案和评论。我最终得到了以下解决方案:

在PHP方面,我用以下命令编码我的字符串:

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

结果是字符串“path / to / file / K \ u00f6ln.jpg”,然后存储在我的配置文件中。 Python模块使用ConfigParser来读取文件。然后使用以下命令对编码的字符串进行解码:

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

结果又是“path / to / file/Köln.jpg”。