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

Problema salida estandar UNIX jar ejecutado desde PHP

Estas en el tema de Problema salida estandar UNIX jar ejecutado desde PHP en el foro de Java en Foros del Web. Buenas. Tengo el siguiente problema: Al ejecutar un .jar desde un php no me detecta correctamente los caracteres. El php recoge la salida estandar que ...
  #1 (permalink)  
Antiguo 12/02/2010, 13:02
 
Fecha de Ingreso: febrero-2010
Mensajes: 4
Antigüedad: 14 años, 2 meses
Puntos: 0
Problema salida estandar UNIX jar ejecutado desde PHP

Buenas.

Tengo el siguiente problema:

Al ejecutar un .jar desde un php no me detecta correctamente los caracteres. El php recoge la salida estandar que lanza el java a través de un System.out.println y lo que hace la clase es obtener los ascii de una serie de palabras. El php obtiene esto:

G = 71
a = 97
r = 114
c = 99
? = 65533
? = 65533
a = 97


En cambio si ejecuto el jar desde consola me saca esto

G = 71
a = 97
r = 114
c = 99
Ã- = 237
a = 97

¿Cómo puede ser que saque codificaciones diferentes en los dos casos?

Gracias de antemano

Saludos
  #2 (permalink)  
Antiguo 12/02/2010, 14:14
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Problema salida estandar UNIX jar ejecutado desde PHP

Hola,

Cada lenguage y sistema trabaja una tabla de caracteres diferente. En mi caso, Java usa UTF, PHP standard usa ASCII, y la consola usa la página de códigos 850, pero no es obligatorio que sea de esta forma.

¿Problematico no?

Que sucede realmente ... la letra ñ en ASCII ocupa 1 byte y su código es A4h en hexadecimal, en Unicode ocupa 2 bytes y su código es 00F1h, en la tabla de códigos 850 también ocupa 1 byte y su código es A4h igual al ASCII.

Si pasas la letra ñ de UTF que ocupa 2 bytes, a la tabla ASCII que no entiende códigos de 2 bytes, cuando conviertes el código 00F1h a ASCII queda 00h + F1h. ASCII interpreta eso como 2 letras, puesto que no entiende códigos de 2 bytes. Y normalmente va a apacer algo parcido a esto ñ, lo que algunos llaman 'simbolos raros' .

Pero ahora viene lo mejor ... si el tipo de letra (font) que usas en la consola, programa, etc., es diferente a la tabla UTF las letras van a cambiar de lugar. Por ejemplo ... escribe un texto cualquiera en el Block de notas y cambia la fuente a Windgings, entonces la letra A se convierte en A.

Lo más probable es que no haya quedado claro en lo más mínimo... Pero busca información sobre las tablas de caracteres y como se representan cada una,

Saludos,

ps:

Posiblemente me haya equivocado en los code points o algo mas .. simplemente es para ejemplificar como funciona las tablas de caracteres.
  #3 (permalink)  
Antiguo 13/02/2010, 06:37
 
Fecha de Ingreso: febrero-2010
Mensajes: 4
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema salida estandar UNIX jar ejecutado desde PHP

HackmanC , a verdad es que ... me he quedado un poco igual con tu contestación pero gracias de todas formas .

Lo que está claro es que es el java el que no está reconociendo la i con tilde puesto que es él el que saca los numeros ASCII.

Lo curioso y lo que sigo sin encontrarle explicación es que si el jar lo ejecuto desde consola con usuario root sí que saca el ASCII correcto de la i con tilde , en cambio si lo ejecuta el php no.

¿Qué usuario es el que lanza el jar desde el php?¿El que está logado en la máquina por defecto? ¿Puede ser por eso?

Gracias y saludos
  #4 (permalink)  
Antiguo 13/02/2010, 12:33
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Problema salida estandar UNIX jar ejecutado desde PHP

Cita:
Iniciado por david_dra Ver Mensaje
HackmanC , a verdad es que ... me he quedado un poco igual con tu contestación ...
Realmente es bastante complicado de explicar.

Cita:
Iniciado por david_dra Ver Mensaje
... Lo que está claro es que es el java el que no está reconociendo la i con tilde puesto que es él el que saca los numeros ASCII. ...
No es que no los reconozca, tanto Java, como PHP y la consola están haciendo su trabajo correctamente. Mientras no comprendas porqué es que no salen igual vas a seguir pensando que es un error de los lenguajes o el sistema.

Cita:
Iniciado por david_dra Ver Mensaje
... Lo curioso y lo que sigo sin encontrarle explicación es que si el jar lo ejecuto desde consola con usuario root sí que saca el ASCII correcto de la i con tilde , en cambio si lo ejecuta el php no. ...
No creo que sea muy curioso o extraño, en tu caso, posiblemente estas usando Xterm, o la consola de Gnome, o cualquier otra consola, y normalmente en Linux todas las consolas vienen configuradas en UTF, igual que Java. Pero PHP no entiende UTF nativamente, así que antes de hacer cualquier cosa con los bytes en PHP, tienes que usar utf8_decode o algo parecido.

Y deja de pensar en letras ... son bytes (números que se relacionan con tablas o listas de letras, si piensas en la í en UTF es el número 1025 y si piensas en la í en ASCII es el número 183, utf8_decode convierte el número 1025 en 183, para que te funcione en ASCII).

Aclaración:
Los numeros me los acabo de inventar, y la conversión es mucho mas compleja.

Cita:
Iniciado por david_dra Ver Mensaje
¿Qué usuario es el que lanza el jar desde el php?¿El que está logado en la máquina por defecto? ¿Puede ser por eso?
Mientras no entiendas la diferencía entre UTF, ISO-88..., ASCII y las demás tablas, no vas a comprender que tu sistema está funcionando perfectamente y es así como debe ser.

Saludos,
  #5 (permalink)  
Antiguo 13/02/2010, 19:19
 
Fecha de Ingreso: febrero-2010
Mensajes: 4
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema salida estandar UNIX jar ejecutado desde PHP

HackmanC, eso es lo que quiero : comprenderlo, por eso estoy escribiendo en el foro, para ver si a alguien le ha pasado un caso parecido y encontró la solución porque yo ni la encuentro ni le veo la explicación.

He cambiado incluso el lenguaje del sistema unix en locales y sigue pasando lo mismo.

¿Alguna pista?

gracias
  #6 (permalink)  
Antiguo 13/02/2010, 23:55
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Problema salida estandar UNIX jar ejecutado desde PHP

Hola,

Cita:
Iniciado por david_dra Ver Mensaje
HackmanC, eso es lo que quiero : comprenderlo, por eso estoy escribiendo en el foro, para ver si a alguien le ha pasado un caso parecido y encontró la solución porque yo ni la encuentro ni le veo la explicación.

He cambiado incluso el lenguaje del sistema unix en locales y sigue pasando lo mismo.
...


Bien, es que quería explicarlo para que pudieras solucionarlo por tu cuenta, ya que no mostraste parte del código, ni diste detalles específicos sobre tu aplicación, ni tu configuración. System.out.println es un PrintStream y usa la codificación que tengas configurada en la plataforma Unix, etc.

En resúmen ...

Si tienes configurada la plataforma para usar UTF entonces a PHP le va a llegar en UTF y puedes usar utf8_decode, desde mi punto de vista es lo mas aconsejable.

De otra forma tendrías que cambiar toda la configuración de tu sistema Unix para que use otra codificación, como ASCII a nivel de todo el sistema. Busca información acerca de LANG en la documentación de Unix que estas usando. Pero es dependiente del sistema que estas usando, en Linux Debian es 'dpkg-reconfigure locales' y se encarga de todo el trabajo.

Pero para probar los cambios temporalmente podrías usar 'export LANG=en_US.ASCII' en una sesion de consola. También podrías probar a cambiar la configuración del file encoding con una variable del sistema, export JAVA_OPTS=-Dfile.encoding=cp1252 o pasarselo directamente al ejecutar java -Dfile.encoding=cp1252.

El usuario con que se ejecuta PHP es el mismo usuario de Apache, pero no va a ejecutar ningún script de bash como .bash_profile, .bashrc, etc. La consola no tiene nada que ver cuando ejecutas PHP dentro de Apache para ejecutar un .JAR.

También puedes usar PHP directamente y crear clases Java dentro de PHP para usar getters y setter.

Sin mayor información no podría haber sido mas específico,
Espero haber sido de alguna ayuda,

Saludos.

Etiquetas: estandar, jar, php, salida, unix
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 11:36.