Итак, у меня есть приложение ASP.Net (vb.net). У него есть текстовое поле, и пользователь вставляет в него текст из Microsoft Word. Таким образом, такие вещи, как длинная черта (код 150) вводятся в качестве входных данных. Другими примерами будут умные цитаты или акцентированные символы. В моем приложении я кодирую их в xml и передаю в базу данных как параметр xml в хранимую процедуру sql. Он вставляется в базу данных так же, как пользователь ввел ее.
Проблема в том, что приложение, которое читает эти данные, не любит эти символы. Поэтому мне нужно перевести их в нижний набор символов ascii (я думаю, 7 бит). Как я могу это сделать? Как определить, в какой кодировке они находятся, чтобы я мог сделать что-то вроде следующего. И просто запросить эквивалент ASCII перевести их разумно, или я должен написать некоторый код для этого?
Также, возможно, для начала может быть проще решить эту проблему на веб-странице. Когда вы копируете выделенные символы из Word, он помещает несколько форматов в буфер обмена. Прямой текст - тот, который я хочу. Есть ли способ получить текстовое поле html получить этот текст, когда пользователь вставляет в него? Нужно ли как-то устанавливать кодировку веб-страницы?
System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(text))
Код из приложения, которое кодирует ввод в xml:
Protected Function RequestStringItem( _
ByVal strName As System.String) As System.String
Dim strValue As System.String
strValue = Me.Request.Item(strName)
If Not (strValue Is Nothing) Then
RequestStringItem = strValue.Trim()
Else
RequestStringItem = ""
End If
End Function
' I get the input from the textboxes into an array like this
m_arrInsertDesc(intIndex) = RequestStringItem("txtInsertDesc" & strValue)
m_arrInsertFolder(intIndex) = RequestInt32Item("cboInsertFolder" & strValue)
' create xml file for inserts
strmInsertList = New System.IO.MemoryStream()
wrtInsertList = New System.Xml.XmlTextWriter(strmInsertList, System.Text.Encoding.Unicode)
' start document and add root element
wrtInsertList.WriteStartDocument()
wrtInsertList.WriteStartElement("Root")
' cycle through inserts
For intIndex = 0 To m_intInsertCount - 1
' if there is an insert description
If m_arrInsertDesc(intIndex).Length > 0 Then
' if the insert description is of the appropriate length
If m_arrInsertDesc(intIndex).Length <= 96 Then
' add element to xml
wrtInsertList.WriteStartElement("Insert")
wrtInsertList.WriteAttributeString("insertdesc", m_arrInsertDesc(intIndex))
wrtInsertList.WriteAttributeString("insertfolder", m_arrInsertFolder(intIndex).ToString())
wrtInsertList.WriteEndElement()
' if insert description is too long
Else
m_strError = "ERROR: INSERT DESCRIPTION TOO LONG"
Exit Function
End If
End If
Next
' close root element and document
wrtInsertList.WriteEndElement()
wrtInsertList.WriteEndDocument()
wrtInsertList.Close()
' when I add the xml as a parameter to the stored procedure I do this
cmdAddRequest.Parameters.Add("@insert_list", OdbcType.NText).Value = System.Text.Encoding.Unicode.GetString(strmInsertList.ToArray())