2
我試圖將一個基於PyQt的應用程序移植到Python 3.如果我用sys.argv初始化QApplication,QApplication.arguments()會返回那些沒有非-ascii字符。解決方法是將參數作爲字節進行編碼。但我很難相信這是最好的方法。爲什麼PyQt不能接受unicode字符串?也許一些區域設置需要調整?python3-qt4在QApplication構造器中丟棄unicode字符串中的非ASCII字符
示例代碼:
#! /usr/bin/python3
from PyQt4.QtGui import QApplication
args = ["test", "tsch\u00fcss", "tsch\u00fcss".encode("utf-8")]
print("args:", args)
qapp = QApplication(args)
qargs = qapp.arguments()
print("qargs:", qargs)
輸出:
args: ['test', 'tschüss', b'tsch\xc3\xbcss']
qargs: ['test', 'tschss', 'tschüss']
東西,讓沒有區別:
import sip
sip.setapi("QString", 2)
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
Ubuntu的14.10,python3-PyQt4的4.11.2 + DFSG-1
我剛剛報告了這個錯誤。至於PySide,它並不好。在Python 3中,字節參數被完全丟棄。在Python 2中,unicode參數會導致解釋器崩潰。 – proski 2015-01-12 21:18:28
'os.fsencode'在Python 2中不可用。我希望代碼在沒有條件的情況下在Python 2和3中工作。 – proski 2015-01-12 21:27:07
@proski。使用PySide-1.2.2和Python 3與unicode工作正常。這不是unicode不適用於Python 2(無論是PySide還是PyQt4)的錯誤,因爲字節應始終是唯一有效的輸入。出於同樣的原因,Python 2中缺少'os.fsencode'是無關緊要的。如果你想要Python 2和Python 3之間的兼容性,你將不得不自己處理這個問題。這裏唯一的錯誤是PyQt不能正確處理Python 3的unicode字符串。 – ekhumoro 2015-01-13 00:46:46