5

Estoy utilizando el almacén de datos GAE para una aplicación Java y el almacenamiento de texto que estará en varios idiomas. En mi servlet, estoy primera comprobación para ver si hay algún dato en el almacén de datos, y, si no, estoy creando algunos, similar a la siguiente:¿Codificación del almacén de datos de Google App Engine?

ArrayList<Lang> list = new ArrayList<Lang>(); 
list.add(new Lang("EN", "English", 1)); 
list.add(new Lang("ES", "Español", 0)); 
//more languages here... 

PersistenceManager pm = PMF.get().getPersistenceManager(); 
for(Lang l : list) { 
    pm.makePersistent(l); 
} 

Dado que este es el uso de JDO, me creo que debería incluir las partes relevantes de la clase Lang también:

@PersistenceCapable 
public class Lang { 
@PrimaryKey 
private String code; 
@Persistent 
private String name; 
@Persistent 
private int popularity; 
// getters & setters & constructors... 
} 

sin embargo, los caracteres no ASCII me están dando dolor. He configurado mi proyecto Eclipse para que use la codificación UTF-8 en lugar del Cp1252 predeterminado, por lo que creo que Estoy bien desde esa perspectiva, pero cuando uso el Visor de datos de App Engine para ver mis datos, eso English la entrada se convierte en español, y cuando hago clic en ella para verla, aparece un error de 500 Server. (Hay algunas otras entradas con texto de derecha a izquierda que ni siquiera aparecen en el visor de datos, pero un problema a la vez ...)

¿Hay algo especial que pueda hacer en mi código para establecer la codificación de caracteres, o especificar a GAE que los datos que estoy almacenando son UTF-8? ¿O está el problema en el lado de Eclipse, y hay algo que debería estar haciendo con mi código de Java?

+0

No es una "solución" per se, pero si inserto los datos manualmente, usando el Visor de datos, se inserta bien, y mi servlet que extrae datos del almacén de datos y lo devuelve también devuelve los datos correctamente. Esto puede convertirse en mi solución; Solo necesito cargar la carga inicial de datos, y después de eso no se actualizará, por lo que hacerlo manualmente es una opción. Aunque preferiría saber por qué la solución de codificación no funcionaba ... – sernaferna

Respuesta

0

¿Estás seguro de que tienes algún problema con tus datos? También me encontré con problemas similares antes, pero resulta que es un problema en la versión de Python del Visor de datos. Puedo recuperar bien mis datos en Java.

+0

Sí, estoy seguro de que es un problema con los datos. Cuando ingreso los datos a través del visor de datos manualmente, veo los datos y mi aplicación también puede recuperar los datos correctamente a través de JSON.Pero cuando creo los datos a través del código Java, de alguna manera se confunde en su camino a la base de datos. – sernaferna

+0

Tal vez su cadena ya está arruinada en Java. Supongamos que su editor está en UTF-8 pero su servidor está en Latin-1. Obtendrá ese texto ilegible. –

1

misma ha solucionado el problema mediante el establecimiento tanto la solicitud como la codificación de respuesta a utf-8. Solicitud de codificación resulta en cadena válida almacenada en el almacén de datos, sin que los valores serán almacenados como "???? ..."

Solicitudes: si utiliza cliente HTTP Apache, esto se hace de la siguiente manera:

petición GET:

solicitud
NameValuePair... params; 
... 
String url = urlBase + URLEncodedUtils.format(Arrays.asList(params), "UTF-8"); 
HttpGet httpGet = new HttpGet(url); 

la publicación:

NameValuePair... params; 
... 
HttpPost httpPost = new HttpPost(url); 
httpPost.setEntity(new UrlEncodedFormEntity(Arrays.asList(params), "UTF-8")); 

respuesta: si usted construye su respuesta en HttpServlet, esto se hace de una manera siguiente:

HttpServletResponse resp; 
... 
resp.setContentType("text/html; charset=utf-8"); 
0

noto que ya ha configurado su proyecto Eclipse para utilizar la codificación de texto UTF-8. ¿Has verificado dos veces el texto que contiene el archivo Java que contiene la cadena como "Español"?

Cuestiones relacionadas