cancel
Showing results for 
Search instead for 
Did you mean: 

Acentos y ñ al usar WebScripts

igomez
Champ on-the-rise
Champ on-the-rise
Hola.

Tengo una aplicación en Java que a través de llamadas a los webscripts de Alfresco realiza ciertas acciones en el mismo.

Algunas de ellas son el alta de personas y de comunidades.

El caso es que cuando añado personas o comunidades y estas llevan algún acento o ñ en la plataforma no se añade correctamente.
El código Java que utilizo es este:

      String alfrescoUser = "usr0000000123";String alfrescoFirstName = "José Miguel";String alfrescoLastName = "Español";String alfrescoEmail = "pruebas@mail_pruebas123.com";      JSONObject personaJSON = new JSONObject();personaJSON.put("userName", alfrescoUser);personaJSON.put("firstName", alfrescoFirstName);personaJSON.put("lastName", alfrescoLastName);personaJSON.put("email", alfrescoEmail);      postRequest = new HttpPost("http://'+ host + ":" + port + "/alfresco/service/api/people?alf_ticket=" + alfTicket); input = new StringEntity(personaJSON.toString());input.setContentType("application/json; charset=UTF-8");input.setContentEncoding("UTF-8");postRequest.setHeader("Content-Type","application/json; charset=UTF-8");postRequest.setEntity(input);response = httpClient.execute(postRequest);‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

He puesto lo del UTF-8 en varios sitios para forzarle pero aún asi nada, me salen cosas de este estilo: Espa�ol, Jos�.

He buscado por foros y demás y he probado lo siguiente, pero en ningún caso funciona:

1- En el setenv.bat en tomcat/bin tengo lo siguiente:
set JAVA_HOME=C:\Alfresco\java                set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Djava.file.encoding=UTF-8 -Duser.languaje=es -Duser.region=ES -XX:PermSize=256mset CATALINA_OPTS=%CATALINA_OPTS% -Dfile.encoding="UTF-8"‍‍‍‍‍

2- En el fichero tomcat/conf/web.xml, las primeras líneas como:
    <servlet>        <servlet-name>default</servlet-name>        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>        <init-param>            <param-name>fileEncoding</param-name>            <param-value>UTF-8</param-value>        </init-param>          <init-param>            <param-name>debug</param-name>            <param-value>0</param-value>        </init-param>        <init-param>            <param-name>listings</param-name>            <param-value>false</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

3- En el fichero tomcat/conf/server.xml el siguiente código:

    <Connector port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" />‍‍‍

He puesto trazas en mi Java y los datos que salen hacia Alfresco salen bien:

Datos de la persona : {"password":"nadadenada","userName":"usuario_pruebas04","email":"pruebas@mail_pruebas123.com","firstName":"Usuario","lastName":"Pruebás"}Codigo: 200‍

Pero el servidor me responde ya con el encoding mal:
Respuesta del servidor …. << Response: HTTP/1.1 200 OK{   "url": "\/alfresco\/service\/api\/person\/usuario_pruebas06",   "userName": "usuario_pruebas06",   "enabled": true,   "firstName": "Usuario",   "lastName": "Prueb\ufffds",   "jobtitle": null,   "organization": null,   "location": null,   "telephone": null,   "mobile": null,   "email": "pruebas@mail_pruebas123.com",   "companyaddress1": null,   "companyaddress2": null,   "companyaddress3": null,   "companypostcode": null,   "companytelephone": null,   "companyfax": null,   "companyemail": null,   "skype": null,   "instantmsg": null,   "userStatus": null,   "userStatusTime": null,   "googleusername": null,   "quota": -1,   "sizeCurrent": 0,   "emailFeedDisabled": false,   "persondescription": null}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Seguiré buscando más información a ver si consigo algo. Mientras tanto, ¿a alguien le ha pasado algo parecido o sabe dónde podría estar el problema?

Muchas gracias!
4 REPLIES 4

aperales
Champ in-the-making
Champ in-the-making
Buenas,

Si de tu cliente java la codificación es correcta, está claro que el problema está en la codificación de la base de datos ¿no?
Podrías probar a definir forzosamente el mapa de caracteres de la base de datos mediante la cadena de conexión que se define en el alfresco-global.properties
db.url=jdbc:mysql://your-host:3306/alfresco?useUnicode=yes&characterEncoding=UTF-8


saludos!

igomez
Champ on-the-rise
Champ on-the-rise
Hola.

La cuestión es que cuando realizo altas desde la propia web si se me guardan bien los acentos, ñ y demás, además la BBDD que uso es Oracle.

Ahora lo volveré a mirar porque aunque la cadena JSON la pinta bien luego parece que el input (cuando hago postRequest.setEntity(input); )destroza este tipo de caracteres por lo que quizá sea tema de mi JVM… Ahora cuando conecte el portátil sigo investigando.

Gracias por contestar  Smiley Happy

igomez
Champ on-the-rise
Champ on-the-rise
Sigo haciendo pruebas y de momento nada funciona.

En el Eclipse he probado a poner todo en UTF-8 y en "Run configurations" igualmente en los parámetros de la JVM tengo un -Dfile.encoding=UTF-8.

Además he forzado el código a que meta en UTF-8 y sigue igual…

postRequest.setHeader("Content-Type","application/json; charset=UTF-8");postRequest = new HttpPost("http://'+ host + ":" + port + "/alfresco/service/api/people?alf_ticket=" + finder.getValue());String persona = "{\"password\":\"welcome\",\"userName\":\"usr_0023\",\"email\":\"pruebas@mail_pruebas123.com\",\"firstName\":\"Usuário\",\"lastName\":\"Pruebás\"}";byte[] utf81 = persona.getBytes("UTF-8");String personaUTF = new String(utf81, "UTF8");System.out.print("Persona UTF : " + personaUTF);input = new StringEntity(personaUTF);      input.setContentEncoding("UTF-8");input.setContentType("application/json;charset=UTF-8");postRequest.setEntity(input);response = httpClient.execute(postRequest);response.addHeader("Content-Type","application/json; charset=UTF-8");‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Ya no sé ni por donde mirar 😕

LordPalma
Champ in-the-making
Champ in-the-making

prueba encriptando los nombres , busca un forma de encriptar y desencriptar algo asi como base64 y asi te quitas del lio de los caracteres especiales de el español ... luego al recibir vuelves a desencriptar y muestras el dato al cliente.