我有一个疑问,因为我需要读一个本地文件,我一直在研究一些线程,我已经看到了各种方法来处理它,在大多数情况下有一个输入文件。
我需要直接通过代码加载它。
我研究过这个帖子:
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中有类似的东西吗?
谢谢你的帮助!
答案 0 :(得分:2)
听起来这个文件是用ISO-8859-1编码的(或者可能是非常相似的Windows-1252)。
这些编码没有BOM或等效物。
我能看到的唯一解决方案是:
使用(本地)服务器并让它返回带有标识为字符集的编码的HTTP Content-Type
标头,例如: Content-Type: text/plain; encoding=ISO-8859-1
使用UTF-8代替(例如,在编辑器中将文件作为ISO-8859-1打开,然后将其另存为UTF-8),因为它是XHR响应主体的default encoding。
答案 1 :(得分:0)
将文本与相应的内容类型一起放入.html
文件中,
例如:
<meta http-equiv="Content-Type" content="text/html; charset="UTF-8">
将文本放在两个标签之间(在我的示例中为“ ####”)(或放在div中)
阅读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);