我正在处理一个接收TSV文件,处理它,然后输出响应的项目。我的朋友和我使用Heroku和Spark将我们基于Java的程序变成了一个Web应用程序。
目前,我们的Web应用程序仅使用某些.tsv文件,而其他文件不支持,我相信这是与.tsv文件的特定编码有关的某种问题。
我们的预期输入文件是从Google表格文档生成的.tsv文件,但目前我们的程序无法正确解析它。 但是,如果我们将该google工作表上的数据复制并粘贴到文本文件中并将其另存为.tsv,那么我们的程序就能成功处理它。这很奇怪,因为这两个文件具有相同的确切内容和文本格式,但是一个不起作用而另一个不起作用。
这是我点击按钮时调用的sendData()JS函数:
function sendData() {
var fr = new FileReader();
fr.onload = function(event) {
var result = event.target.result;
$.post("/rides", result, function(result, error) {
result = result.replace(/\n/g, "<br>");
$(".result").html(result);
});
};
var rides = $("#rides");
var files = rides[0]['files'];
var file = files[0];
fr.readAsText(file, 'ASCII');
}
以下是通过Java接收和读取请求的地方:
public static void main(String[] args)
{
port(getHerokuAssignedPort());
staticFileLocation("/public");
get("/ping", (req, res) -> "pong");
post("/rides", (req, res) -> {
System.out.println("parsing...");
final RawParticipants participants = parser.parseInitialRequest(req.body());
final AssignedRides result = orchestrator.orchestrateRides(participants);
System.out.println(participants);
return result.toString();
});
}
输出因不同的.tsv文件而异,但从Google表格下载的所有内容都无法正常解析。 要么我们的程序无法从Google表格中读取文件中的任何内容,要么它可以读取某些行,但它无法读取其他内容。保持在我的面前没有什么特别的数据。只是通过标签分隔的纯文本。我查看了Google表格如何对其.tsv文件进行编码,并且它看起来不是什么特别的ASCII编码,这与从副本创建的.tsv文件相同/糊。所以我对如何解决这个问题感到有点困惑,特别是当我可以输入具有相同确切信息的.tsv文件时,只是生成不同的信息,并让我的程序成功读取它。
有谁知道为什么它不能处理某些.tsv文件以及可能的解决方案是什么?谢谢!如果需要,我非常愿意提供更多信息。
答案 0 :(得分:0)
我不久前就遇到了这个问题,但我已经成功解决了这个问题。 .tsv文件解析无法正常工作的原因是由于Google表格在下载网站时生成的CRLF行终止符。在某些方面,这是编码错误,但不需要通过深入的文件编辑来解决。我需要做的就是替换&#34; / r / n&#34;与常规&#34; / n&#34;表示.tsv文件中的新行。这些行终止符被放置在每行的末尾,并且正确读取文件。因此,为了解决这个问题,我只需要用我使用的换行符的默认表示法替换它们:&#34; / n&#34;。瞧!固定的。