在Javascript中加载文本文件会添加意外的额外隐藏字符

在Javascript中加载文本文件会添加意外的额外隐藏字符,javascript,string,Javascript,String,也许只是因为极度缺乏睡眠,但我不明白为什么会发生这种情况。我有一个包含4个字母单词的文本文件,每行一个,如下所示: text lolz test word var request = new XMLHttpRequest(); request.open("GET", "test.txt"); request.onloadend = function() { var wordList = request.response; wordList = wordList.split('\

也许只是因为极度缺乏睡眠,但我不明白为什么会发生这种情况。我有一个包含4个字母单词的文本文件,每行一个,如下所示:

text
lolz
test
word
var request = new XMLHttpRequest();
request.open("GET", "test.txt");
request.onloadend = function()
{
    var wordList = request.response;
    wordList = wordList.split('\n');

    for(var i = 0; i < wordList.length; i++)
        wordList[i] = wordList[i].trim();

    console.log(wordList[4].length);
}
request.send();
当我试图逐行将此文件加载到数组中时,我得到的字符串长度为5个字符

var request = new XMLHttpRequest();
request.open("GET", "test.txt");
request.onloadend = function()
{
    var wordList = request.response;
    wordList = wordList.split('\n');

    console.log(wordList[2].length);
}
request.send();

我正在使用记事本++进行编辑,我发现每行末尾都没有空格。函数的作用是删除字符串被拆分的字符,因此多余的字符不应该是“\n”。使用Chrome中的console.log,我无法确定额外的字符实际上是什么。似乎没有

如果您以前从未遇到过这个问题,那么这可能是一个奇怪的问题。有时,新行(您似乎已经熟悉)中不仅包含“\n”字符,还包含“\r”字符作为“回车符”。这意味着打字机除了跳过一个空格外,还需要一直向左移动才能开始新的一行。我不确定你能不能预测你什么时候能拿到马车票。。。它可能是特定于平台的?或者是特定于文本编辑器?也许有真正的知识的人可以扩展这个答案

无论如何,现在请尝试向每个条目添加一个trim(),这样可以消除隐藏的、您看不到的“\r”,如下所示:

text
lolz
test
word
var request = new XMLHttpRequest();
request.open("GET", "test.txt");
request.onloadend = function()
{
    var wordList = request.response;
    wordList = wordList.split('\n');

    for(var i = 0; i < wordList.length; i++)
        wordList[i] = wordList[i].trim();

    console.log(wordList[4].length);
}
request.send();
var-request=new-XMLHttpRequest();
打开(“GET”、“test.txt”);
request.onloadend=函数()
{
var wordList=request.response;
wordList=wordList.split('\n');
for(var i=0;i
如果您以前从未遇到过这个问题,那么这可能是一个奇怪的问题。有时,新行(您似乎已经熟悉)中不仅包含“\n”字符,还包含“\r”字符作为“回车符”。这意味着打字机除了跳过一个空格外,还需要一直向左移动才能开始新的一行。我不确定你能不能预测你什么时候能拿到马车票。。。它可能是特定于平台的?或者是特定于文本编辑器?也许有真正的知识的人可以扩展这个答案

无论如何,现在请尝试向每个条目添加一个trim(),这样可以消除隐藏的、您看不到的“\r”,如下所示:

text
lolz
test
word
var request = new XMLHttpRequest();
request.open("GET", "test.txt");
request.onloadend = function()
{
    var wordList = request.response;
    wordList = wordList.split('\n');

    for(var i = 0; i < wordList.length; i++)
        wordList[i] = wordList[i].trim();

    console.log(wordList[4].length);
}
request.send();
var-request=new-XMLHttpRequest();
打开(“GET”、“test.txt”);
request.onloadend=函数()
{
var wordList=request.response;
wordList=wordList.split('\n');
for(var i=0;i
我在拆分日期字符串时遇到了类似的问题;在每个数组项的开头和结尾添加了一个额外的“不可见”字符
string.trim()
不起作用

我花了2天时间完成以下工作:

已从以下位置创建datetime数组:

        var datetime = new Date();
        var dt = datetime.toLocaleString();
        var datetimearray=dt.split(" ");
从datetime数组创建的日期和时间字符串:

        var date=datetimearray[0];
        var time=datetimearray[1];
拆分日期和时间字符串:

        var datearray=datetimearray[0].split("/");
        var timearray=datetimearray[1].split(":");
然后将每个日期和时间元素转换为数字:

        var day =  getNumberFromString(datearray[0]);
        var month= getNumberFromString(datearray[1]);
        var year = getNumberFromString(datearray[2]);
        var hour =  getNumberFromString(timearray[0]);
        var minute= getNumberFromString(timearray[1]);
        var second = getNumberFromString(timearray[2]);
getNumberFromString函数:

    function getNumberFromString(string)
    {
        var stringsplit=string.split("");
        var stringlen=string.length;  // If it is the year part of the date, the length is 6
        switch(stringlen)
        {
             case 3:  // The last part of the time element (seconds) is only 3 for some reason
             case 4:  // The two character elements (day, month, hour, minute) are length 4 after the split
               var string1=stringsplit[1];  // create the first needed character from second array element; index 1
               var string2=stringsplit[2];  // create the second needed character from third array element; index 2

               string=string1+string2;  //add the 2 new elements together
               return parseInt(string); //convert the number as a string to a number

            case 6:  // For the date string; similar to the above 
              string1=stringsplit[1];
              string2=stringsplit[2];
              string3=stringsplit[3];
              string4=stringsplit[4];
              year1=string1+string2;
              year1num=parseInt(year1);
              year2=string3+string4;
              year2num=parseInt(year2);
              return [year1,year2];            
        }
    }
最后创建了一个查找数组以用于某些加密:

    var lookup=[day,month,year1,year2,hour,minute,second];

如果有人能给我一个更短的方法,我将不胜感激。

我在拆分日期字符串时也遇到过同样的问题;在每个数组项的开头和结尾添加了一个额外的“不可见”字符
string.trim()
不起作用

我花了2天时间完成以下工作:

已从以下位置创建datetime数组:

        var datetime = new Date();
        var dt = datetime.toLocaleString();
        var datetimearray=dt.split(" ");
从datetime数组创建的日期和时间字符串:

        var date=datetimearray[0];
        var time=datetimearray[1];
拆分日期和时间字符串:

        var datearray=datetimearray[0].split("/");
        var timearray=datetimearray[1].split(":");
然后将每个日期和时间元素转换为数字:

        var day =  getNumberFromString(datearray[0]);
        var month= getNumberFromString(datearray[1]);
        var year = getNumberFromString(datearray[2]);
        var hour =  getNumberFromString(timearray[0]);
        var minute= getNumberFromString(timearray[1]);
        var second = getNumberFromString(timearray[2]);
getNumberFromString函数:

    function getNumberFromString(string)
    {
        var stringsplit=string.split("");
        var stringlen=string.length;  // If it is the year part of the date, the length is 6
        switch(stringlen)
        {
             case 3:  // The last part of the time element (seconds) is only 3 for some reason
             case 4:  // The two character elements (day, month, hour, minute) are length 4 after the split
               var string1=stringsplit[1];  // create the first needed character from second array element; index 1
               var string2=stringsplit[2];  // create the second needed character from third array element; index 2

               string=string1+string2;  //add the 2 new elements together
               return parseInt(string); //convert the number as a string to a number

            case 6:  // For the date string; similar to the above 
              string1=stringsplit[1];
              string2=stringsplit[2];
              string3=stringsplit[3];
              string4=stringsplit[4];
              year1=string1+string2;
              year1num=parseInt(year1);
              year2=string3+string4;
              year2num=parseInt(year2);
              return [year1,year2];            
        }
    }
最后创建了一个查找数组以用于某些加密:

    var lookup=[day,month,year1,year2,hour,minute,second];

如果有人能给我指出一条较短的路,我将不胜感激。

你说得对,那是一条“/r”!我觉得自己很笨。。。哇,谢谢你的快速回答……你说得对,这是一个“/r”!我觉得自己很笨。。。哇,谢谢你的快速回答。。。