No funciona con símbolos como &

Para quienes programan Visual Basic aqui esta la solucion
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
opicos
Mensajes: 1
Registrado: Jue Jun 09, 2016 7:56 pm

No funciona con símbolos como &

Mensajepor opicos » Jue Jun 09, 2016 7:59 pm

Tengo un cliente que su nombre contiene un &, pero diseñé el proceso de generación de xml reemplazando las vocales con acento por sin acento, ñ’s por n’s y si tiene caracter & el proceso se detenga para que el usuario corrijan el nombre del cliente por una Y en el catálogo.

Si el nombre del cliente contiene caracteres no permitidos:
If InStr(1, Me!Arrendatario.Value, "&") > 0 Then
MsgBox "El nombre del arrendatario (cliente):" & vbCr & vbCr & Me!Arrendatario.Value & vbCr & vbCr & _
"No debe contener caracteres extraños como '&'." & vbCr & vbCr & _
"Para corregir esto, vaya al catálogo de cliente y modifique el nombre.", vbCritical, TítMsj
Exit Sub
End If

La mayoría de los clientes con esa situación no hay problema, pero salió uno que lo quiere con el & porque así está registrado ante hacienda y es algo que no sé cómo hacerle por qué al reemplazar “&” por “&”, y al momento de intentar timbrarlo, me falla el sistema totalmente, al parecer el problema está en el UTF8sinBOM. El Ing. Tarello me comentó que como el sistema está desarrollado con VBA en Access por ahí va el problema.

Te mando el segmento de código que procesa esta situación:

'Reemplaza caracteres especiales:
strCadenaOriginal = Replace(strCadenaOriginal, "&", "&")
strCadenaOriginal = Replace(strCadenaOriginal, """", """)
strCadenaOriginal = Replace(strCadenaOriginal, "<", "&lt;")
strCadenaOriginal = Replace(strCadenaOriginal, ">", "&gt;")
strCadenaOriginal = Replace(strCadenaOriginal, "'", "&apos;")

strCadenaOriginal = RetiraSecuencia(strCadenaOriginal)

strCadenaOriginal = fcnReemplazarAcentosyÑs(strCadenaOriginal)

On Error Resume Next
Kill pathClaves & "\ArchCadenaOriginalUTF8sinBOM.txt"
On Error GoTo 0

'Llama a la función:
fcnGenerarUTF8sinBOM strCadenaOriginal, pathClaves & "\ArchCadenaOriginalUTF8sinBOM.txt"

……………………………………………………………………………………………

Function fcnGenerarUTF8sinBOM(strCadenaOriginal As String, archivoUTF8sinBOM As String)
Dim UTFStream As Object
Set UTFStream = CreateObject("ADODB.stream")
UTFStream.Type = adTypeText
UTFStream.Mode = adModeReadWrite
UTFStream.Charset = "UTF-8"
UTFStream.LineSeparator = adLF
UTFStream.Open
'UTFStream.WriteText "This is an unicode/UTF-8 test.", adWriteLine
'UTFStream.WriteText "First set of special characters: öäåñüûú€", adWriteLine
'UTFStream.WriteText "Second set of special characters: qwertzuiopõúasdfghjkléáûyxcvbnm\|Ä€Í÷×äðÐ[]í³£;?¤>#&@{}<;>*~¡^¢°²`ÿ´½¨¸0", adWriteLine
UTFStream.WriteText strCadenaOriginal

UTFStream.Position = 3 'skip BOM

Dim BinaryStream As Object
Set BinaryStream = CreateObject("ADODB.stream")
BinaryStream.Type = adTypeBinary
BinaryStream.Mode = adModeReadWrite
BinaryStream.Open

'Strips BOM (first 3 bytes)
UTFStream.CopyTo BinaryStream

'UTFStream.SaveToFile "d:\adodb-stream1.txt", adSaveCreateOverWrite
UTFStream.Flush
UTFStream.Close

BinaryStream.SaveToFile archivoUTF8sinBOM, adSaveCreateOverWrite
BinaryStream.Flush
BinaryStream.Close
End Function

Al intentar timbrar y esperar respuesta del servidor, el sistema me falla totalmente.

Cualquier orientación te lo agradezco de antemano.

Cordialmente,

s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

Re: No funciona con símbolos como &

Mensajepor s3cr3to » Jue Jun 09, 2016 8:44 pm

No uso PHP, pero te recomiendo que habras tus archivos de texto generados con un editor que te indique el encoding.
Si ya tienes generado el XML o algo intermedio que sea XML, usa el "firstobject XML editor" que tiene una versión gratuita y ademas de indicarte el encoding; en caso de no serlo te deja guardarlo con el encoding que necesites y asi podrias probar tu aplicación antes de tronar usando el archivo "temporal" correctamente codificado.
Fue gracias a "firstobject XML editor" que descubrí el error de encoding en mi aplicación, ademas de que puedes validar la estructura del XML.

Cuando estaba haciendo los XML para contabilidad en Delphi, pase por ese problema al momento que no guardar el encoding correcto de los archivos XML.
Si revisaba y guardaba el contenido directamente desde un editor en sqlserver, el XML se guardaba correctamente codificado, pero mi aplicación por desconocimiento la guardaba como unicode-blah-blah, y ese encoding no era UTF-8.

Haciendo uso correcto del encoding (en Delphi) al salvar el stream a un archivo .xml todo funciono.
Antes de resolverlo hice cada tonteria... desde escribir las "Ñ" como "&ntilde;" y cosas que no servian porque el mismo "&" del "&tilde;" al no estar en UTF-8 fallaba completamente en el validador del SAT.

Y como "normalmente" los productos de M$ usan unicode para todo (algunos te dejan cambiar el encoding)... seguro la sugierencia de Ing. Tarello es correcta.

A la hora de mezclar tecnologias usando archivos es cuando esto ocurre.
Mi caso: sqlserver + (la ignorancia de usar encoding correctamente) + Delphi


Volver a “Visual Basic”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados