Google App Engine - данные хранятся странным образом - PullRequest
4 голосов
/ 18 апреля 2011

Я использую Java.Это чистые данные, которые вставляются в хранилище данных:

<p>Something</p>\n<p>That</p>\n<p> </p>\n<p>Should.</p>\n<p> </p>\n
<p>I have an interesting question.</p>\n<p>Why are you like this?</p>\n
<p> </p>\n<p>Aren't you fine?</p>

Вот как они хранятся:

<p>Something</p> <p>That</p> <p>�</p> <p>Should.</p> <p>�</p> 
<p>I have an interesting question.</p> <p>Why are you like this?</p> 
<p>�</p> <p>Aren't you fine?</p>

Что случилось со странными символами?Это происходит только вживую, а не на моем локальном dev_appserver.

РЕДАКТИРОВАТЬ

Вот код, который вставляет данные:

String content = ""; // this is where the data is stored
try {
    ServletFileUpload upload = new ServletFileUpload();
    FileItemIterator iter = upload.getItemIterator(request);
    while(iter.hasNext()) {
        FileItemStream item = iter.next();
        InputStream stream = item.openStream();

        if(item.isFormField()) {
            String fieldName = item.getFieldName();
            String fieldValue = new String(IOUtils.toByteArray(stream), "utf-8");
            LOG.info("Got a form field: " +fieldName+" with value: "+fieldValue);
            // assigning the value
            if(fieldName.equals("content")) content = fieldValue;
        } else {
            ...
        }
    }
} catch (FileUploadException e){
}

...
// insert it in datastore
Recipe recipe = new Recipe(user.getKey(), title, new Text(content), new Text(ingredients), tagsAsStrings);
pm.makePersistent(recipe);

Это multipart/form-data форма, поэтому я должен сделать эту маленькую магию item.isFormField(), чтобы получить реальное содержимое, и создать строку.Может быть, это вызывает странную проблему с кодировкой?Не уверен.

Для извлечения данных я просто делаю:

<%=recipe.getContent().getValue()%>

Поскольку content имеет тип Text (тип движка приложения), я использую .getValue() для получения фактического результата.,Я не думаю, что это проблема с извлечением данных, так как я могу видеть странные символы непосредственно в онлайн-просмотрщике хранилища данных движка приложений.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

За этой страницей следовало создать фильтр сервлетов, чтобы все мои страницы кодировались в utf8:

Как заставить UTF-8 работать в веб-приложениях Java?

После создания фильтра все работает!

0 голосов
/ 20 апреля 2011

Вы используете затмение?если да, то в разделе «Файл»> «Свойства»> «Кодировка текстового файла» укажите, что ваш файл имеет кодировку UTF-8.

Я бы не стал догадываться.

Итак, измените его на UTF-8 и проблема должна появиться.исправлено.

С уважением

Дидье

...