从Google Cloud pub/sub反序列化JSON并保留UTF-8编码



注意-我将此作为"问答"发布;答:因为我在SO上还没有发现一个现有的问题,该问题与从谷歌云发布/子流反序列化JSON并保留UTF-8字符集的特定场景相匹配。我有一个解决方案,我想发布一个答案,让社区可以使用(请参阅https://stackoverflow.com/help/self-answer):

如果你有一个问题,你已经知道答案希望公开记录这些知识,以便其他人(包括你自己(可以稍后找到,询问并在Stack Exchange网站上回答您自己的问题。


我从Google Cloud pub/sub URL接收JSON,我知道它使用UTF-8编码。我可以通过检查当我使用Fiddler 直接向pub/sub URL发出请求时得到的响应来看到这一点

我可以像这样反序列化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);
}

当我在Eclipse中检查myResponseObject时,JSON中ASCII字符集之外的一些字符没有正确显示。

然后,在我将生成的数据集添加到BigQuery中后,我在BigQuery数据中看到这样的字符,代替了不属于ASCII集的某些字符。

��

�'是一个指示符,表示编码未得到正确处理,并且某些文本编码已丢失。如何保留编码?

我需要为来自Google Cloud pub/sub的输入流设置编码。我可以为谷歌云发布/子流这样做:

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);
}

最新更新