我正在处理一个项目,它接收TSV文件,处理它,然后输出一个响应。我和我的朋友用Heroku和Spark把我们基于Java的程序变成了一个网络应用程序。
目前,我们的web应用程序只处理特定的.tsv文件,而其他的则不工作,我相信这是一个与.tsv文件的特定编码有关的问题。
我们的预期输入文件是从Google文档生成的.tsv文件,但目前,我们的程序无法正确地解析它。但是,如果我们将数据复制并粘贴到文本文件中,并将其保存为.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文件吗?解决方案是什么?谢谢!如果需要的话,我更愿意提供更多的信息。
发布于 2018-02-02 04:47:39
我以前在这个问题上被困了一段时间,但我设法解决了这个问题。.tsv文件解析不能正确工作的原因是由Google在从网站下载时生成的CRLF行终止器造成的。在某些方面,这是一个编码错误,但不需要通过深入的文件编辑来解决。我所需要做的就是将"/r/n“替换为常规的"/n”,以表示.tsv文件中的新行。这些行终止符被放置在每一行的末尾,并干扰了文件的正确读取。因此,为了解决这个问题,我只需将它们替换为我使用的换行符的默认表示法:"/n“。瞧!已修复。
https://stackoverflow.com/questions/47973427
复制相似问题