Я новичок и работаю над XUL. У меня есть скрипт, который я могу читать, писать и сохранять свой XML-файл в XUL. Если я использую специальные символы, такие как 'é' или 'è', в точности французские буквы, мой XUL-файл не может загрузить XML-файл из-за различных символов.
1.Как я могу изменить свой Java-скрипт на чтение / запись / сохранение файла в кодировке UTF-8?
Вот скрипт:
//Reading the file as a plain xml file.
function readFile(savefile) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to read file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
alert("File does not exist");
}
var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance( Components.interfaces.nsIFileInputStream );
is.init( file,0x01, 00004, null);
var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
.createInstance( Components.interfaces.nsIScriptableInputStream );
sis.init( is );
var output = sis.read( sis.available() );
return output;
}
function saveFile(output, savefile) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to save file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
alert( "File Updated Successfully ");
file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
}
var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance( Components.interfaces.nsIFileOutputStream );
outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 );
var result = outputStream.write( output, output.length );
outputStream.close();
//alert( "File Updated Successfully ");
clear();
reload();
}
Я пытался использовать скрипт с этого сайта, я не мог понять https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O. Мне кажется, что вышеописанный скрипт действительно прост для чтения / записи / сохранения любого файла в виде простого текста.
Пожалуйста, помогите мне изменить приведенный выше скрипт для чтения / записи / сохранения файла, который имеет 'encoding = "UTF-8"'
По приведенной выше ссылке мне удалось записать файл XML в 'encoding = "UTF-8"'.
Это мой скрипт для записи файлов: он отлично работает!
function saveFile(output, savefile) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to save file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
alert( "File Updated Successfully ");
file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
}
var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance( Components.interfaces.nsIFileOutputStream );
outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 );
var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(outputStream, "UTF-8", 0, 0);
converter.writeString(output);
converter.close(); // this closes foStream
outputStream.close();
alert( "File Updated Successfully ");
clear();
reload();
Моя проблема здесь, чтобы прочитать 'encoding = "UTF-8"' в JavaScript:
Это моя функция чтения, которая не читает специальные символы, такие как «é», «à» и т. Д.
Я знаю, мне нужно внести некоторые изменения, но я пытался, но все равно это не работает.
//Reading the file as a plain xml file.
function readFile(savefile) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to read file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
alert("File does not exist");
}
// var data = "";
var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance( Components.interfaces.nsIFileInputStream );
is.init(file, -1, 0, 0);
var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
.createInstance( Components.interfaces.nsIScriptableInputStream );
sis.init( is, "UTF-8", 0, 0);
var output = sis.read(0xffffffff, sis.available() );
return output;
}
Упомянутый ниже скрипт предназначен для чтения файла 'encoding = "UTF-8" с веб-сайта Mozilla.
/*///////////////////////////////////////////////
// |file| is nsIFile
var data = "";
var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"].
createInstance(Components.interfaces.nsIFileInputStream);
var cstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"].
createInstance(Components.interfaces.nsIConverterInputStream);
fstream.init(file, -1, 0, 0);
cstream.init(fstream, "UTF-8", 0, 0); // you can use another encoding here if you wish
let (str = {}) {
let read = 0;
do {
read = cstream.readString(0xffffffff, str); // read as much as we can and put it in str.value
data += str.value;
} while (read != 0);
}
cstream.close(); // this closes fstream
alert(data);
*///////////////////////////////////////////////
Мне нужна помощь в изменении исходного файла сценария чтения для чтения формата 'encoding = "UTF-8".
Примечание: я обновил свой оригинальный вопрос в той же теме. Большое спасибо.
Я обновляю функцию readfile в этой теме:
function readFile(savefile) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to read file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
alert("File does not exist");
}
var data = "";
var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"].
createInstance(Components.interfaces.nsIFileInputStream);
var cstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"].
createInstance(Components.interfaces.nsIConverterInputStream);
fstream.init(file, -1, 0, 0);
cstream.init(fstream, "UTF-8", 0, 0); // you can use another encoding here if you wish
let (str = {}) {
let read = 0;
do {
read = cstream.readString(0xffffffff, str); // read as much as we can and put it in str.value
data += str.value;
} while (read != 0);
}
var output= data;
return output;
cstream.close(); // this closes fstream
}