gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:31:11 25 4
gpt4 key购买 nike

注意 - 我将此作为“问答”发布,因为我还没有找到与从 Google Cloud 发布/订阅流中反序列化 JSON 的特定场景相匹配的现有问题并保留 UTF-8 字符集。我对此有一个解决方案,我想发布一个答案以将其提供给社区(请参阅 https://stackoverflow.com/help/self-answer ):

If you have a question that you already know the answer to, and you would like to document that knowledge in public so that others (including yourself) can find it later, it's perfectly okay to ask and answer your own question on a Stack Exchange site.

<小时/>

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

我可以像这样反序列化 JSON(使用 Google Gson library ):

        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 的输入流的编码。我可以对 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);
}

关于java - 从 Google Cloud pub/sub 反序列化 JSON 并保留 UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53605199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com