Классические гремлины ASP, получая Â вставили в текст каждый раз, когда специальный символ HTML используется

Извините, я использую 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_())

enter image description here

5
задан mercator 4 February 2009 в 18:38
поделиться

4 ответа

Фундаментальной проблемой является влияние Ответа. Кодовая страница на Сообщениях Формы.

Когда Вы отправляете форму клиенту, указывающему, что содержание кодируется как UTF-8, браузер предположит, что содержание сообщений формы должно быть отправлено закодированное как UTF-8.

Теперь страница действия, которая получает сообщение, будет (несколько counter-intuatively), используют значение Response.Codepage сообщать этому, как символы в сообщении кодируются. Это не очевидно, потому что мы склонны думать, что это - задание отправителя для определения кодирования какой его отправка. Также это не естественный прыжок, чтобы думать, что свойство, чтобы сделать с кодированием того, что мы хотим отправить в нашем ответе, имело бы какое-либо отношение, как начальная буква запрос получена. В этом случае это делает.

То, что происходит, является Вашей формой, отправляет закодированную версию UTF-8 символа, но страница, которая получает, не имеет своего Ответа. Набор кодовой страницы к 65 001 (кодовая страница UTF-8). Вероятно, набор к системам кодовая страница OEM как 1252. Следовательно кодировка UTF-8 для символа интерпретируется как два отдельных символа.

Мои рекомендации для хорошей обработки символа в ASP являются:-

  • Сохраните все страницы как UTF-8
  • Включайте <% codepage=65001 наверху всех страниц
  • Включайте <Ответ %. CharSet = % "UTF-8"> наверху все страницы
  • Храните отправленные данные в unicode типе поля, таком как SQL Server тип NVARCHAR.

Важная вещь здесь состоит в том что перед чтением значений формы в ASP-странице, необходимо удостовериться что Ответ. Кодовая страница установлена на кодовую страницу, которая соответствует кодированию отправителей, и этого не происходит автоматически.

12
ответ дан 18 December 2019 в 12:02
поделиться

Я собираюсь предполагать, что редактор, которого Вы используете, не работает с UTF-8 и преобразовывает все в ASCII.

Простой ответ должен прекратить использовать специальные символы в страницах HTML. Символ авторского права должен быть записан как &copy; или &#169;.

2
ответ дан 18 December 2019 в 12:02
поделиться

® - то, на что похож ®, если он сохранен как UTF-8, но отображен как ASCII/ISO-8859-1/Windows-1252. Используя meta тега недостаточно, чтобы удостовериться, что Вашей страницей служат UTF-8. Необходимо будет также установить кодирование в HTTP-заголовке Типа контента. Этот заголовок обычно устанавливается или с некоторой установкой всего сервера или программно.

Я не знаю ASP, но это, кажется, как необходимо установить тот заголовок:

HtmlEncode UTF-8

И это могло бы предоставить еще некоторую информацию:

http://technet.microsoft.com/en-us/library/bb742422.aspx#EBAA

Если Ваши данные будут храниться в базе данных, то необходимо будет также удостовериться, что данные или хранятся в UTF-8 также или преобразовываются при хранении и получении его.

0
ответ дан 18 December 2019 в 12:02
поделиться

На основе моего опыта с этой точной проблемой я нашел, что эти символы открылись много, потому что 1) пользователь использовал неанглийский набор символов (и клавиатура), когда содержание вводилось (т.е. испанский язык), и 2) содержание не было преобразовано в UTF-8. Вы на правильном пути, проверяя тип контента в заголовок, но действительно необходимо выполнить содержание через преобразователь, также, если это продолжает происходить. Эта проблема вызвала меня часы боли, много лет назад, с Классиком ASP (мне жаль, что у меня все еще не было доступа к коду, чтобы быть дальнейшей справки).

1
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: