¿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á.

  • Android: Necesito una vista previa circular de la cámara. ¿Cómo lograrlo?
  • Android - acceso a los activos de la aplicación de prueba
  • Cómo detener a Eclipse de intentar ejecutar archivos XML?
  • Recurso desplegable del atributo personalizado
  • No se puede iniciar la actividad ComponentInfo {com.example.countryselect / com.example.countryselect.OfferSelect}
  • No se puede arrastrar DrawerLayout desde ListView
  • Cómo cambiar la dirección de la sombra de elevación de Android?
  • Android TextView Problema de enfoque en listview (sólo MarshMallow)
  • Android Switch Widget: Configuración de android: la pista hace que el pulgar y la pista no se muestren
  • Android: analiza XML desde problemas de cadena
  • ¿Por qué esta línea xmlns: android = "http://schemas.android.com/apk/res/android" debe ser la primera en el archivo xml de diseño?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.