Problema caracter hexadecimal java

ReMaTxEs

Buenas! A ver, tengo un problemilla que me esta jodiendo bastante y necesito ideas o como cojones resolverlo xD

La situación es la Siguiente. En una Bases de Datos (Enabler de Fujitsu) tengo ciertos objetos que en un determinado campo (Descripcion) tiene un caracter chungo (Vamos, que no lo entiende). Un programa en C se dedica a leer esta información y a escribirla en un fichero, el problema es que en ciertas ocurrencias peta xq no es capaz de leer el caracter.

Programa#GKARRERE#4#KRER - Relaci n de remesas#Cerrado# Lo lee y lo escribe
Programa#GKARREEF#1# No es capaz de leerlo

Si consulto la BBDD con el programa correspondiente en ambos me casos m muestar el mismo caracter (El cuadradito) Si ademas veo ese caracter en hexadecimal a traves del UltraEdit me dice que su codigo es el 1A (El sub, supongo que sera que lo sustituye xq no lo entiende)

Al final la solución que se ha decido es sustitur todos esos caracteres chungos por el espacio en blanco y aquí llega mi problema, he hecho un pequeño java que lee la cadena de la descripcion y por cada caracter me muestra su caracter, su codigo hexadecimal y su codigo ascii. Y para mi sorpresa en ambos casos es el mismo. Es decir aparentemente Java no es capaz de diferenciarlos.

Alguien sabe como cojones puedo diferenciarlos u obtener su codigo hexadecimal correctamente (Me dice q es ffffffd)

Os dejo el codigo a continuación, por si acaso.

//Este no consigue leerlo
	System.out.println("GKARREEF");
	//atrDesc contiene la descrpción del objeto
	String desc = "";
	if (atrDesc!=null && atrDesc.getValor()!=null)
		desc=(String)atrDesc.getValor();
				
if (desc!=null && desc!=""){
				
	char[] cadena = desc.toCharArray();
	// Comprobamos si contiene el caracter chungo
	for (int k=0;k<cadena.length;k++){
		int valor=new Integer((byte)cadena[k]+"").intValue();
		System.out.println(cadena[k]+" -> "+Integer.toHexString(valor)+
		" ->"+(byte)cadena[k]);
	}
}
			

			
// Este si consigue leerlo
System.out.println("GKARRERE");
// atrDesc2 contiene la descrpción del objeto
if (atrDesc2!=null && atrDesc2.getValor()!=null)
	desc2=(String)atrDesc2.getValor();
			
if (desc2!=null && desc2!=""){
	char[] cadena2 = desc2.toCharArray();
	// Comprobamos si contiene el caracter chungo
	for (int k=0;k<cadena2.length;k++){
		int valor=new Integer((byte)cadena2[k]+"").intValue();
		System.out.println(cadena2[k]+" -> "+Integer.toHexString(valor)+
		" ->"+(byte)cadena2[k]);
	}
				
}

Y aquí la salida que muestra por consola:

spoiler

Thx!!

JuAn4k4

Igual el problema es de la función en C que lo escribe mal en el fichero.
Haz un println del "atrDesc.getValor()"

Porque tu lo que lees mal ¿ es del fichero o de la base de datos ?

ReMaTxEs

El C no tiene nada que ver. Cuando en C leo ese atributo (Con un metodo de una libreria del mismo fabricante que la BBDD) aquello se queda rebentao, no hace nada, ni saca trazas ni nada, es como si pegase un core.

A falta de soluciones sustituire todos las caracteres cullo byte sea negativo :S

Usuarios habituales

  • ReMaTxEs
  • JuAn4k4