Десериализовать JSON из Google Cloud pub / sub и сохранить кодировку UTF-8 - PullRequest
0 голосов
/ 04 декабря 2018

Примечание. Я публикую это как «Вопросы и ответы», так как я не нашел существующего вопроса в SO, который соответствует конкретному сценарию десериализации JSON из паба / подпотока Google Cloud.и сохранение набора символов UTF-8 .У меня есть решение для этого, и я хочу опубликовать ответ, чтобы сделать его доступным для сообщества (см. https://stackoverflow.com/help/self-answer):

Если у вас есть вопрос, на который вы уже знаете ответ, и вы быхотел бы задокументировать эти знания публично, чтобы другие (в том числе и вы) могли найти их позже, вполне нормально задавать и отвечать на свои вопросы на сайте Stack Exchange.


Яполучая JSON от URL-адреса публикации / подписки в Google Cloud, и я знаю, что он использует кодировку UTF-8. Я могу убедиться в этом, изучив ответ, который я получаю, когда отправляю запрос непосредственно на URL-адрес публикации / подписки, используя Fiddler

Я могу десериализовать JSON следующим образом (используя библиотеку Google Gson ):

        URL myUrl= new URL("myUrl");

        HttpURLConnection connection = (HttpURLConnection) myUrl.openConnection();

        MyResponseObject myResponseObject;

        try {           
            myResponseObject = new Gson()
                    .fromJson(new BufferedReader(new InputStreamReader(connection.getInputStream())), MyResponseObject.class);
        }

Когда я проверяю myResponseObject в Eclipse, некоторые изсимволы в JSON, которые находятся за пределами набора символов ASCII, отображаются неправильно.

Затем, после добавления результирующего набора данных в BigQuery, я вижу такие символы в данных BigQuery на местенекоторых символов, которые не относятся к набору ASCII.

��

'�' - это индикатор, который означает, что кодировка не была правильно обработана и что некоторая кодировка текстабыл потерянКак мне сохранить кодировку?

1 Ответ

0 голосов
/ 04 декабря 2018

Мне нужно было установить кодировку для входного потока из паба / подпрограммы Google Cloud.Я могу сделать это для паба / подпотока Google Cloud, например:

import java.nio.charset.Charset;
import com.google.api.client.util.Charsets;

    URL myUrl= new URL("myUrl");

    HttpURLConnection connection = (HttpURLConnection) myUrl.openConnection();

    MyResponseObject myResponseObject;

    Charset cs = Charsets.UTF_8;

    try {           
        myResponseObject = new Gson()
                .fromJson(new BufferedReader(new InputStreamReader(connection.getInputStream(), cs)), MyResponseObject.class);
    }
...