Revelando los personajes ocultos en tus cuerdas
¿Alguna vez ha encontrado comportamientos misteriosos al trabajar con cadenas o texto de diversas fuentes? No estás solo. Muchos desarrolladores se han enfrentado a situaciones en las que Len() de una cadena no coincide con lo que se ve visualmente en la pantalla. Quizás haya obtenido una cadena que se muestra como una serie de ‘?’ personajes,
Los culpables: caracteres Unicode y no imprimibles
Estas desconcertantes discrepancias a menudo surgen de caracteres Unicode y no imprimibles. Estos caracteres furtivos pueden ser parte de sus datos, pero no necesariamente aparecen cuando se muestran. Son como invitados invisibles en una fiesta: ¡presentes pero invisibles!
Revelando lo invisible: usando AscW()
Entonces, ¿cómo desenmascaramos a estos personajes ocultos? Como no podemos simplemente imprimirlos en la pantalla, necesitamos convertirlos a sus valores numéricos. Aquí es donde la función AscW() viene a nuestro rescate.
Una solución simple pero poderosa
El proceso es sencillo:
- Iterar sobre cada carácter de la cadena.
- Aplicar la función AscW() a cada carácter.
- Mostrar o analizar los valores numéricos resultantes.
Aquí hay una función simple que hace precisamente eso:
Function ConvertStringToChrWValues(inputString As String, _ Optional sDelimiter As String = " ") As String On Error GoTo Error_Handler Dim sOutput As String Dim lCounter As Long For lCounter = 1 To Len(inputString) If lCounter > 1 Then sOutput = sOutput & sDelimiter sOutput = sOutput & CStr(AscW(Mid(inputString, lCounter, 1))) Next lCounter ConvertStringToChrWValues = sOutput Error_Handler_Exit: On Error Resume Next Exit Function Error_Handler: MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _ "Error Source: ConvertStringToChrWValues" & vbCrLf & _ "Error Number: " & Err.Number & vbCrLf & _ "Error Description: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "An Error has Occurred!" Resume Error_Handler_Exit End Function
Ahora, puedes lanzarle cualquier cadena que desees, ¡esta función podrá mostrarte todos los caracteres que contiene!