¿Cómo puedo eliminar caracteres no reconocidos que vuelven de un servicio web?

Estoy trabajando en una aplicación que llama un servicio web de descanso. A veces, las respuestas xml contienen caracteres que el teléfono no puede mostrar. Al mostrar estos caracteres, un cuadro vacío se muestra en su lugar. Me gustaría filtrar estos personajes. ¿Cómo puedo detectar si un personaje puede ser mostrado en la pantalla?

Algunos caracteres específicos incluyen:

http://www.fileformat.info/info/unicode/char/0094/index.htm http://www.fileformat.info/info/unicode/char/0080/index.htm http: //www.fileformat. info / info / unicode / char / 0092 / index.htm

Android soporta las siguientes codificaciones

  • Xml.Encoding ISO_8859_1
  • Xml.Encoding US_ASCII
  • Xml.Encoding UTF_16
  • Xml.Encoding UTF_8

US_ASCII no debería causar ningún problema.

Para ISO_8859_1 puede comprobar http://en.wikipedia.org/wiki/ISO/IEC_8859-1 para los caracteres de control 0x00-0x1f y 0x7f-0x9f y filtrarlos. Y por supuesto utilice una fuente a juego.

Utilizando UTF_8 o 16 es más complejo, lea Joels El mínimo absoluto Cada desarrollador de software Absolutamente, Positivamente debe saber acerca de Unicode y conjuntos de caracteres

Es posible que encuentre útil esta lista de correo.

En primer lugar, intenta obtener el juego de caracteres predeterminado de tu dispositivo con:

Charset.defaultCharset(); 

A continuación, intente obtener el conjunto de caracteres de su XML buscando en pseudo-atributo de la declaración XML o en el encabezado Content-Type de la llamada HTTP.
Por ejemplo:

 <?xml version="1.0" encoding="utf-8" ?> 

o

 Content-Type: text/html; charset=utf-8 

Si el conjunto de caracteres predeterminado de su dispositivo es diferente del conjunto de caracteres de XML, debe prestar atención al manejar nuevas cadenas con:

 new String( bytes); 

porque si se olvida de especificar la codificación correcta, Dalvik utilizará la codificación por defecto del dispositivo con errores de visualización plausibles.
Recuerde utilizar:

 new String( bytes, encoding); 

Parece que puedo llamar a Character.isIdentifierIgnorable() en cada carácter y no incluirlo si es ignorable. Character.isISOControl() probablemente también funcionará.

  • Cómo agregar encabezado y pie de página a cada actividad en android
  • Interruptor de Android - cambia el fondo del interruptor en encendido / apagado
  • Quitar la sombra de ActionBar en Android L (API 21)
  • Android Studio - No se puede inflar la etiqueta de vista sin atributo de clase
  • Múltiples anotaciones encontradas en esta línea:
  • Problema XML en el ejemplo del menú básico
  • Error al analizar xml: prefijo sin consolidar de com.google.android.gms.ads.AdView
  • Símbolo de porcentaje en strings.xml
  • Android Databinding atributo xml duplicado
  • ListFragment aparece dos veces en el teléfono
  • Jerarquía de estilo en Android - ¿cuál es el orden de importancia?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.