2011-02-03 13 views
5

Estoy usando .NET, y tengo que truncar una cadena que puede contener caracteres multibyte para que no supere una longitud establecida una vez que esté codificada en la URL . Esto parece algo integrado, pero no puedo encontrarlo.Limitar la longitud de una cadena URL codificada con caracteres multibyte en .NET

Me gustaría hacer una subcadena una vez que está codificada en URL, pero eso podría quitar parte de un carácter codificado (el espacio se convierte en% 20, y si fuera al final podría truncarse a% 2, que es inválido), o esa parte de un carácter multibyte se truncaría (π se codifica como% CF% 80, y podría truncarse como%,% CF,% CF% 8, todos los cuales son incorrectos).

+0

¿Estás preguntando cómo truncar una cadena a una longitud determinada o estás preguntando cómo hacerlo automáticamente? La respuesta es que la primera pregunta es longString.Substring (0, maxLength). – Kendrick

+0

@Kendrick: Creo que la pregunta es que realmente no se sabe cuánto tiempo va a estar una cadena en su forma urinada, hasta que realmente la urlínea, ya que algunos caracteres en el original (también conocidos como caracteres multibyte) requerirán más de un byte en la versión urlencoded. – MusiGenesis

+0

@MusiGenesis: Eso es correcto. He actualizado mi pregunta para ser más específico. – thefroatgt

Respuesta

1

Mi búsqueda rápida en Google no arrojó nada para esto, lo cual es un poco sorprendente ya que parece ser un problema relativamente común (al menos para aquellos que no evitan las URL monstruosamente largas).

Puede hacer esto de forma iterativa donde codifica la cadena, y si la cadena codificada es demasiado larga, corta un carácter del original y vuelve a codificar, y siga haciendo esto hasta que la cadena codificada sea lo suficientemente corta. Esto obviamente no sería muy eficiente.

+0

Pero podría hacer algo así como una búsqueda binaria. Llame a 'Encoding.GetByteCount()'. Si eso es demasiado largo, reste la mitad de la diferencia de la longitud de la cuerda y vuelva a intentarlo. Si eso le sirve, agregue la mitad de la diferencia, etc. Aunque hacerlo carácter por carácter probablemente sea "lo suficientemente rápido", considerando que esto probablemente no se hará con mucha frecuencia. –

Cuestiones relacionadas