摄入 BQ 时出现 ä 等特殊字符的数据流问题(不同口音的问题)

问题描述 投票:0回答:1

我面临使用数据流将 API 摄取到 BQ 中的问题。在数据流中,我提取内容并将其传递到 BQ,而不进行任何解析。然而,它会像下面这样进入 BQ:

而这个词应该是实际的“Zählerablesung”。当我使用运行器作为“DataflowRunner”而不是“direct”执行数据流时,会发生这种特殊行为。我看到过类似的帖子并想到使用 UTF 编码。所以我稍微修改了代码。

@ProcessElement
        public void processElement(OutputReceiver <String> receiver) throws IOException, ParseException {
            if (this.conn.getResponseCode() == 200) {
                BufferedReader in = new BufferedReader(new InputStreamReader(this.conn.getInputStream(), StandardCharsets.UTF_8));
                String output;
                output = new String(output.getBytes("UTF-8"));
                StringBuilder response = new StringBuilder();

                while ((output = in.readLine()) != null) {
                    response.append(output);
                }
                in.close();
                JSONArray jsonArray = new JSONArray(response.toString());
                jsonArray.iterator().forEachRemaining( jsonObject -> receiver.output(jsonObject.toString()));
            }
        }

不过,我没有看到任何差异。任何帮助将不胜感激

java google-bigquery encoding google-cloud-dataflow
1个回答
0
投票

我在这里找到了解决方案。除了我在响应上添加了迭代之外,它与问题没有太大区别。另外,我删除了问题陈述中的额外编码步骤。

 @ProcessElement
    public void processElement(OutputReceiver <String> receiver) throws IOException {
        if (this.conn.getResponseCode() == 200) {
            BufferedReader in = new BufferedReader(new InputStreamReader(this.conn.getInputStream(), StandardCharsets.UTF_8));
            String output;
            StringBuilder response = new StringBuilder();
            while ((output = in.readLine()) != null) {
                response.append(output);
            }
            in.close();
            JSONArray jsonArray = new JSONArray(response.toString());
            Iterator<Object> iterator = jsonArray.iterator();
            while (iterator.hasNext()){
                Object obj = iterator.next();
                receiver.output(obj.toString());
                }
            }
        }
    }

现在我可以在 BQ 中看到原始格式的数据了:

© www.soinside.com 2019 - 2024. All rights reserved.