javascript,我们怎么能读到带有重音字母的本地文本文件呢?

时间:2018-03-24 18:11:40

标签: javascript html utf-8 character-encoding

我有一个疑问,因为我需要读一个本地文件,我一直在研究一些线程,我已经看到了各种方法来处理它,在大多数情况下有一个输入文件。

我需要直接通过代码加载它。

我研究过这个帖子:

How to read a local text file?

我可以阅读它。

令人惊讶的是,当我试图分割线条和单词时,它显示:�替换重音字母。

我现在的代码是:

myFileReader.js

function readTextFile(file) {

    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, false);
    rawFile.onreadystatechange = function () {
        if (rawFile.readyState === 4) {
            if (rawFile.status === 200 || rawFile.status == 0) {
                allText = rawFile.responseText;
                console.log('The complete text is', allText);
                let lineArr = intoLines(allText);
                let firstLineWords = intoWords(lineArr[0]);
                let secondLineWords = intoWords(lineArr[1]);

                console.log('Our  first line is: ', lineArr[0]);

                let atlas = {};
                for (let i = 0; i < firstLineWords.length; i++) {
                    console.log(`Our ${i} word in the first line is : ${firstLineWords[i]}`);
                    console.log(`Our ${i} word in the SECOND line is : ${secondLineWords[i]}`);
                    atlas[firstLineWords[i]] = secondLineWords[i];
                }
                console.log('The atlas is: ', atlas);
                let atlasJson = JSON.stringify(atlas);
                console.log('Atlas as json is: ', atlasJson);

                download(atlasJson, 'atlasJson.txt', 'text/plain');
            }
        }
    };
    rawFile.send(null);
}

function download(text, name, type) {

    var a = document.getElementById("a");
    var file = new Blob([text], {type: type});
    a.href = URL.createObjectURL(file);
    a.download = name;
}

function intoLines(text) {
    // splitting all text data into array "\n" is splitting data from each new line
    //and saving each new line as each element*

    var lineArr = text.split('\n');

    //just to check if it works output lineArr[index] as below


    return lineArr;


}

function intoWords(lines) {


    var wordsArr = lines.split('" "');


    return wordsArr;

}

怀疑是:我们怎么能处理那些带有重音元音的特殊字符?

我问这个问题,因为即使在IDE中,如果我们以UTF-8加载txt,也会出现询问标记,因此我更改为ISO-8859-1并且加载良好。

我也研究过:

Read UTF-8 special chars from external file using Javascript

Convert special characters to HTML in Javascript

Reading a local text file from a local javascript file?

此外,你能解释一下在客户端javascript中加载文件的方法是否更短。例如,在Java中有FileReader / FileWriter / BufferedWriter。在Javascript中有类似的东西吗?

谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

听起来这个文件是用ISO-8859-1编码的(或者可能是非常相似的Windows-1252)。

这些编码没有BOM或等效物。

我能看到的唯一解决方案是:

  1. 使用(本地)服务器并让它返回带有标识为字符集的编码的HTTP Content-Type标头,例如: Content-Type: text/plain; encoding=ISO-8859-1

  2. 使用UTF-8代替(例如,在编辑器中将文件作为ISO-8859-1打开,然后将其另存为UTF-8),因为它是XHR响应主体的default encoding

答案 1 :(得分:0)

  1. 将文本与相应的内容类型一起放入.html文件中, 例如:

    <meta http-equiv="Content-Type" content="text/html; charset="UTF-8">
    

    将文本放在两个标签之间(在我的示例中为“ ####”)(或放在div中)

  2. 阅读html页面,提取内容并选择文本:

     window.open(url); //..
     var content = newWindow.document.body.innerHTML;
     var strSep="####";
     var x = content.indexOf(strSep);
     x=x+strSep.length;    
     var y = content.lastIndexOf(strSep); 
     var points=content.slice(x, y);