Foros del Web » Programación para mayores de 30 ;) » .NET »

Contar Caracteres en .net

Estas en el tema de Contar Caracteres en .net en el foro de .NET en Foros del Web. Saludos a todos, tengo un Web Service desarrollado en .net, para uno de los metodos debo verificar la longitud de una cadena, y en funcion ...
  #1 (permalink)  
Antiguo 21/12/2011, 00:27
 
Fecha de Ingreso: febrero-2009
Mensajes: 64
Antigüedad: 15 años, 2 meses
Puntos: 1
Contar Caracteres en .net

Saludos a todos, tengo un Web Service desarrollado en .net, para uno de los metodos debo verificar la longitud de una cadena, y en funcion a esto realizar algunas acciones, el problema que tengo es que cuando me mandan cadenas que contienen vocales acentuadas, me toma cada caracter acentuado como dos caracteres, lo cual me esta rompiendo la cabeza, llevo todo el dia investigando en la web y lamentablemente no doy con la solucion; lo mismo me pasaba en asp clasico y lo resolvi estableciendo el charset a iso-8859-1; trate de emular esta solucion en .net agregando al web.config:

<globalization
requestEncoding="iso-8859-1"
responseEncoding="iso-8859-1"/>

Pero el problema persiste, he tratado varias formas de codificar los caracteres y luego tomar el Len o el Length de la cadena y nada.

Les agradezco muchisimo cualquier orientacion.
  #2 (permalink)  
Antiguo 21/12/2011, 02:31
Avatar de keriosp  
Fecha de Ingreso: noviembre-2011
Ubicación: iworld
Mensajes: 53
Antigüedad: 12 años, 5 meses
Puntos: 9
Respuesta: Contar Caracteres en .net

Hola, como solución "parcheada" podrías poner en el bucle que lee los caracteres que si es un "´", "`", "^", pues no lo cuente. Supongo que habrás probado con la codificación utf-8.
Saludos!

Cita:
Iniciado por mash180 Ver Mensaje
Saludos a todos, tengo un Web Service desarrollado en .net, para uno de los metodos debo verificar la longitud de una cadena, y en funcion a esto realizar algunas acciones, el problema que tengo es que cuando me mandan cadenas que contienen vocales acentuadas, me toma cada caracter acentuado como dos caracteres, lo cual me esta rompiendo la cabeza, llevo todo el dia investigando en la web y lamentablemente no doy con la solucion; lo mismo me pasaba en asp clasico y lo resolvi estableciendo el charset a iso-8859-1; trate de emular esta solucion en .net agregando al web.config:

<globalization
requestEncoding="iso-8859-1"
responseEncoding="iso-8859-1"/>

Pero el problema persiste, he tratado varias formas de codificar los caracteres y luego tomar el Len o el Length de la cadena y nada.

Les agradezco muchisimo cualquier orientacion.
  #3 (permalink)  
Antiguo 21/12/2011, 12:15
 
Fecha de Ingreso: febrero-2009
Mensajes: 64
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Contar Caracteres en .net

Gracias por tu respuesta, la codificacion UTF8 es por defecto, la cambie a iso-8859-1 pues me resolvio parcialmente el error en asp clasico, trata de contar con un bucle, pero el problema es que la cadena recibidida esta codificada y trato de decodificarla con diferentes opciones y siempre len devuelve mas caracteres que los que realmente estoy pasando, siempre que hay caracteres especiales (áéíóúñÑ).
  #4 (permalink)  
Antiguo 21/12/2011, 14:21
 
Fecha de Ingreso: febrero-2009
Mensajes: 64
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Contar Caracteres en .net

Para realizar pruebas publique este metodo:

Código:
<WebMethod()> _
    Public Function chkLargo(ByVal str As String)
        Return Len(Encoding.GetEncoding("ISO-8859-1").GetString(Encoding.UTF8.GetBytes(str)))
    End Function

Si lo pruebo en local, pasandole "Caño" devuelve 4 al publicarlo en la web y consumirlo devuelve 5

Alguna sugerencia?
  #5 (permalink)  
Antiguo 22/12/2011, 02:47
Avatar de keriosp  
Fecha de Ingreso: noviembre-2011
Ubicación: iworld
Mensajes: 53
Antigüedad: 12 años, 5 meses
Puntos: 9
Respuesta: Contar Caracteres en .net

Yo miraría como está escrita la cadena cuando la recibe el web service, a ver si desde la página que introducen la cadena viene escrita con entities &acurate; o así los caracteres especiales. O sino probaría a pasarla a una variable definida en el web service de manera que no calcules la len directamente a la variable que te envían,
Saludos!

Cita:
Iniciado por mash180 Ver Mensaje
Para realizar pruebas publique este metodo:

Código:
<WebMethod()> _
    Public Function chkLargo(ByVal str As String)
        Return Len(Encoding.GetEncoding("ISO-8859-1").GetString(Encoding.UTF8.GetBytes(str)))
    End Function

Si lo pruebo en local, pasandole "Caño" devuelve 4 al publicarlo en la web y consumirlo devuelve 5

Alguna sugerencia?
  #6 (permalink)  
Antiguo 27/12/2011, 10:44
 
Fecha de Ingreso: febrero-2009
Mensajes: 64
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Contar Caracteres en .net

Kerio gracias por tu respuesta, logre "solucionar" el problema usando esto:

Código:
    Function chkString(ByVal Cadena As String) As Boolean
        Cadena = Trim(Cadena)
        Cadena = System.Web.HttpUtility.UrlDecode(Cadena)
        If Len(Cadena) > 70 Then
            Return Regex.IsMatch(Cadena, "^[a-zA-Z0-9-/?|!|(\[)|(\])|@|.|,|(\$)|;|:|*|+|/n|=| |]+$")
        Else
            Return Regex.IsMatch(Cadena, "^[a-zA-Z0-9-/¿?|!|¡|(\[)|(\])|@|.|,|(\$)|;|:|*|+|/n|=|á|é|í|ó|ú|ñ|Ñ|Á|É|Í|Ó|Ú|�| |]+$")
        End If
    End Function
Esta función la llamo desde el Método y si devuelve true guardo la información en la base de datos SQL Server 2005; lo cual estaba funcionando sin problemas, al agregar:

Código:
Cadena = Trim(Cadena)
        Cadena = System.Web.HttpUtility.UrlDecode(Cadena)
Ahora me esta guardando en la base de datos caracteres raros como "%20"; lo cual no entiendo, pues al método no le modifique nada. Estoy tratando de usar la misma instrucción anterior, pero reemplaza los caracteres especiales (áéíóúñÑ) con "�".

Ahora bien en la función a chkString para que funcionara tuve que agregar al patrón "�", lo cual esta mal, pues cualquier carácter especial (por ejemplo ~) lo reemplazara con "�" y solo quiero comprobar ciertos caracteres especiales (los demás que están en el patrón.)

Alguna sugerencia?
  #7 (permalink)  
Antiguo 28/12/2011, 02:36
Avatar de keriosp  
Fecha de Ingreso: noviembre-2011
Ubicación: iworld
Mensajes: 53
Antigüedad: 12 años, 5 meses
Puntos: 9
Respuesta: Contar Caracteres en .net

Hola, pues no se de donde puede aparecer el carácter con fondo negrita ese. Pero si inicialmente te llegan caracteres con "%20", o sea el espacio en blanco codificado en la url, entonces es que la cadena se envía por un formulario que pasa los datos por url (tiene un method=get), se me ocurre si puedes tener acceso a la página de donde se envía la cadena poner en el formulario que se envíe por method=post, así no debería de haber problemas con "%20", ni haga falta usar el urldecode.
Saludos!

Etiquetas: caracteres, net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:59.