簡體   English   中英

python gui中的utf-8編碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM