2017-06-03 15 views
0

在一個項目中,我需要一個PHP和一個Python模塊(Python 3.5.2)。以及兩個模塊都使用的配置文件。 Python configparser在讀取配置文件中的特殊字符時遇到問題,如德語變異元音(ä,ö,ü,例如)。從PHP端我用的是UTF-8編碼來繞過這個問題:在Python中的UTF-8字符串解碼

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

從Python端我嘗試瞭解碼功能:

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

我預期的結果「科隆」,但剛結果「Köln」再次。 我該怎麼做解碼我的字符串?

+0

你的'LANG'環境變量設置爲utf-8語言環境,是嗎? – user2722968

+0

你可以驗證使用的編碼類型嗎?您可以嘗試使用'chardet'並使用'chardet.detect(u「Köln」)' –

+0

您應該在Unicode問題上提及Python版本(最好是帶有標籤),因爲Python 2中的Unicode處理與其如何完全不同在Python 3中工作。 –

回答

0

嘗試這些代碼加入您的文檔的頂部:

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

這可能會幫助你,更多的文檔here

+0

我在運行時遇到了錯誤,使用了字符串。你建議的這行代碼已經包含在我的源代碼中。 – Toby

0

在這樣的情況下,你應該在你的.py的第一行添加#-*- coding: UTF-8 -*-文件。

+0

這對此有何幫助?編碼指令註釋僅影響解釋器如何解碼腳本文件本身,它與腳本如何處理外部數據無關。 –

0

在Python3中,所有文本都是unicode。所以我會建議,在你的PHP端,將字符串轉換爲Unicode(輸出爲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

好的。如果您要在PHP端保存數據,您應該在Python端以二進制模式讀取數據。然後你可以像這樣解碼字節數據:'data = b「path/to/file/K \ u00f6ln.jpg」; s = data.decode('unicode-escape')'。這可以在Python 2和Python 3上正常工作。您可能會發現這篇文章很有用:[Pragmatic Unicode](http://nedbatchelder.com/text/unipain.html),這是SO老手Ned Batchelder編寫的。 –