[英]utf-8 coding in python gui
我有一個使用英語和匈牙利語的簡單應用程序。 所有可本地化的對象都位於單獨的modul -localizable.py中,例如:
#!/usr/bin/python
# -*- coding: utf-8 -*-
...
...
if language == "hun":
LOGIN_LABEL_USERNAME_STR = 'Felhasználó'
LOGIN_LABEL_PASSWORD_STR = 'Jelszó'
elif language == "eng":
LOGIN_LABEL_USERNAME_STR = 'Username'
LOGIN_LABEL_PASSWORD_STR = 'Password'
但是,當我在loginDialog.py中使用匈牙利語時:
import localizable
...
...
loginLayout.addRow(localizable.LOGIN_LABEL_USERNAME_STR, QtGui.QLineEdit())
loginLayout.addRow(localizable.LOGIN_LABEL_PASSWORD_STR, QtGui.QLineEdit())
...
我得到了Felhasználó
和Jelszó
而不是Felhasználó
和Jelszó
。 任何幫助,將不勝感激。
為什么不在可localizable
模塊中使用unicode
對象,而不使用沒有編碼的字節串?
if language == "hun":
LOGIN_LABEL_USERNAME_STR = u'Felhasználó'
LOGIN_LABEL_PASSWORD_STR = u'Jelszó'
這對我來說具有預期的效果。
您可能還需要考慮使用Qt提供的內置功能 。
發生這種情況是因為源文件是UTF8編碼的,這意味着字符串Felhasználó
在源代碼文件中表示為字節46 65 6c 68 61 73 7a 6e c3 a1 6c c3 b3
。 如果將這個字節數組打印出來,好像它們是在LATIN-1編碼中一樣,您將得到Felhasználó
。
此外,您將這些UTF-8編碼的字節作為純字符串傳遞給Qt,這似乎假定它是LATIN-1編碼的。 這意味着,而不是像在UTF8中那樣假設字節c3 b3
( ó
)是ó
代碼,而是假定c3
是普通Ã
而b3
是³
,這對於LATIN1就是這種情況。
frb的答案是執行此操作的正確方法,因為通過發送unicode
字符串代替,您已經完成了所有解釋,並且對Qt沒有任何歧義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.