Необходимо сохранить загружаемый файл, для этого прежде всего создаю его:

Выделить код

Код:

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(destinationfullpath);
if( !file.exists() || !file.isFile() ) { file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644) };
var fileURI = ioService.newFileURI(file);

код работает нормально, если кодировка имени файла английская или совпадает с кодовой страницей ОС. В противном случае (имя файла в юникоде) подучаю ошибку:

Выделить код

Код:

[Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsILocalFile.create]"  nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)

Как обойти эту ошибку и таки создать файл?

Какой путь-то?
Я сейчас вот такое проверил:

Выделить код

Код:

var path = "D:\\æƠɫφՔẲ㋻㍼";
var file = Components.classes["@mozilla.org/file/local;1"]
    .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(path);
file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);

Работает.

Сохраняю в темп

Выделить код

Код:

var destinationfullpath = "C:\\temp\\"+unescape("いくつかのファイル名.pdf")

Такое у меня тоже работает, в том числе и в Firefox 10.0.11.
Возможно, от операционной системы зависит.

Хмм... А файл создаётся?
Добавил два алерт-а - до и после создания файла. Первый появляется (но имя файла пишет знаками вопроса - может в этом проблема?), а второй нет - сразу срабатывает алерт из последней строки - ловит ошибку.
Специально кодировку имени файла я никак не обозначал - скорее всего она получается UTF-16 Little Endian.

Выделить код

Код:

try {'

var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(destinationfullpath);

alert(destinationfullpath);

file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);

alert(destinationfullpath);

 }catch(e){alert(e);}'

-------
Уря! :) Сконвертировал имя файла в UTF-8 и всё заработало!