ExecuteStreamCommand不会读取外来字符

时间:2019-09-11 08:57:33

标签: java c# windows-10 apache-nifi

我们已将Apache Nifi设置为将文件写入本地驱动器,然后运行处理这些文件并输出对“ response”属性的响应的程序。这是一个JSON字符串,然后我们将其传递给API以更新记录。

但是,问题是,尽管我们可以成功地编写,读取和处理文件,但Nifi无法理解响应文本中的非英语字符。当我们发回响应时,这会导致名称被破坏。这仅适用于我们从程序收到的JSON字符串。

Nifi正在运行Windows 10环境当我们使用Nifi输出的文件手动运行程序时,我们将获得正确的输出。问题只发生在Nifi中。

举个例子,输入json是:

{
  "player" : "mörkö",
  "target" : "goal",
  "didhitin" : ""
}

这存储在我们的程序工作文件夹中,我们使用ExecuteStreamCommand调用程序,并以输入的JSON文件作为参数。处理JSON,我们的程序输出以下JSON,然后将其存储到流文件的响应属性中:

{
  "player" : "mörkö",
  "target" : "goal",
  "didhitin" : "true"
}

但是,问题是,当Nifi将其读入流文件的响应属性时,它将变成

{
  "player" : "m¤rk¤",
  "target" : "goal",
  "didhitin" : "true"
}

(不是实际过程,但足够接近来演示问题)

当我们将其输入到API中时,它将失败或破坏原始名称(在这种情况下为播放器的值)。两者都不是理想的输出。

到目前为止,我们已经发现这很可能是编码方面的问题,但是我们还没有找到一种方法来更改Nifi的编码以解决错误读取的字符。

1 个答案:

答案 0 :(得分:0)

通过在程序的开头添加以下行来解决此问题:

Console.OutputEncoding = Encoding.UTF8;

这有效地强制程序输出UTF-8字符,该字符将与其余流程保持一致。