Извините, я использую PyQt5
import sys
#from PyQt4 import QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
names = [
'7', '8', '9', '-',
'4', '5', '6', '+',
'1', '2', '3', 'enter',
'0', '', '.']
positions = [(i,j) for i in range(4) for j in range(4)]
for position, name in zip(positions, names):
if name == '':
continue
button = QPushButton(name)
button.clicked.connect(self.buttonClicked)
button.setMinimumWidth(50)
button.setMinimumHeight(50)
if button.text() == 'enter':
button.setMinimumHeight(110)
grid.addWidget(button, *position, 2, 1)
elif button.text() == '0':
grid.addWidget(button, *position, 1, 2)
else:
grid.addWidget(button, *position, 1, 1)
def buttonClicked(self):
print(self.sender().text())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
ex.setWindowTitle('Calculator')
ex.setGeometry(300, 150, 250, 250)
sys.exit(app.exec_())
Фундаментальной проблемой является влияние Ответа. Кодовая страница на Сообщениях Формы.
Когда Вы отправляете форму клиенту, указывающему, что содержание кодируется как UTF-8, браузер предположит, что содержание сообщений формы должно быть отправлено закодированное как UTF-8.
Теперь страница действия, которая получает сообщение, будет (несколько counter-intuatively), используют значение Response.Codepage
сообщать этому, как символы в сообщении кодируются. Это не очевидно, потому что мы склонны думать, что это - задание отправителя для определения кодирования какой его отправка. Также это не естественный прыжок, чтобы думать, что свойство, чтобы сделать с кодированием того, что мы хотим отправить в нашем ответе, имело бы какое-либо отношение, как начальная буква запрос получена. В этом случае это делает.
То, что происходит, является Вашей формой, отправляет закодированную версию UTF-8 символа, но страница, которая получает, не имеет своего Ответа. Набор кодовой страницы к 65 001 (кодовая страница UTF-8). Вероятно, набор к системам кодовая страница OEM как 1252. Следовательно кодировка UTF-8 для символа интерпретируется как два отдельных символа.
Мои рекомендации для хорошей обработки символа в ASP являются:-
Важная вещь здесь состоит в том что перед чтением значений формы в ASP-странице, необходимо удостовериться что Ответ. Кодовая страница установлена на кодовую страницу, которая соответствует кодированию отправителей, и этого не происходит автоматически.
Я собираюсь предполагать, что редактор, которого Вы используете, не работает с UTF-8 и преобразовывает все в ASCII.
Простой ответ должен прекратить использовать специальные символы в страницах HTML. Символ авторского права должен быть записан как ©
или ©
.
® - то, на что похож ®, если он сохранен как UTF-8, но отображен как ASCII/ISO-8859-1/Windows-1252. Используя meta
тега недостаточно, чтобы удостовериться, что Вашей страницей служат UTF-8. Необходимо будет также установить кодирование в HTTP-заголовке Типа контента. Этот заголовок обычно устанавливается или с некоторой установкой всего сервера или программно.
Я не знаю ASP, но это, кажется, как необходимо установить тот заголовок:
И это могло бы предоставить еще некоторую информацию:
http://technet.microsoft.com/en-us/library/bb742422.aspx#EBAA
Если Ваши данные будут храниться в базе данных, то необходимо будет также удостовериться, что данные или хранятся в UTF-8 также или преобразовываются при хранении и получении его.
На основе моего опыта с этой точной проблемой я нашел, что эти символы открылись много, потому что 1) пользователь использовал неанглийский набор символов (и клавиатура), когда содержание вводилось (т.е. испанский язык), и 2) содержание не было преобразовано в UTF-8. Вы на правильном пути, проверяя тип контента в заголовок, но действительно необходимо выполнить содержание через преобразователь, также, если это продолжает происходить. Эта проблема вызвала меня часы боли, много лет назад, с Классиком ASP (мне жаль, что у меня все еще не было доступа к коду, чтобы быть дальнейшей справки).