Как я могу записать файл в кодировке UTF-8 на компьютер пользователя, используя JavaScript на IE? - PullRequest
10 голосов
/ 13 декабря 2010

Я пишу локальный файл с использованием JavaScript, и я использую IE для того же.

Мой код выглядит следующим образом:

function savefile( f,g){

var w = window.frames.w;
if( !w ) {
    w = document.createElement( 'iframe' );
    w.id = 'w';
    w.style.display = 'none';
    document.body.insertBefore( w );
    w = window.frames.w;
    if( !w ) {
        w = window.open( '', '_temp', 'width=100,height=100' );
        if( !w ) {
            window.alert( 'Sorry, could not create file.' );
            return false;
        }
    }
}

var d = w.document;
d.open( 'text/xml', 'replace');
d.charset = "UTF-8";

d.write(JWPFormToHTML(f));
d.close();
var name= g.filename.value;

if( d.execCommand( 'SaveAs', false , name ) )
{
    g.filename.value=name;
    //document.getElementById("filename").value="";
    alert('File has been saved.' );
}
else
{
    alert( 'The file has not been saved.\nIs there a problem?' );
}
w.close();
return false;
}

Проблема, с которой я сталкиваюсь, это файлне сохраняется как файл в кодировке UTF-8, хотя я добавил к нему <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>.

Пожалуйста, помогите мне или предложите мне какую-нибудь альтернативу.

ПРИМЕЧАНИЕ. Я хотел быфайловый менеджер, который открывается перед сохранением файла, как в случае execCommand.

Ответы [ 4 ]

3 голосов
/ 21 декабря 2010

Скорее всего, у вас есть проблема с тем фактом, что Windows обычно кодирует Unicode в UTF-16, и браузер не заботится о какой-либо альтернативе.

Вы можете пойти по пути ActiveX, FileSystemObject поддерживает флаг формата Unicode для текстовых потоков, но я бы поспорил, что это та же самая 16 кодировка.Однако объект ADODB.Stream содержит свойство charset, которое может быть настроено на различные форматы, включая utf-8

http://msdn.microsoft.com/en-us/library/ms526296(v=exchg.10).aspx

Кроме этого, я думаю, что вам лучше всего написатьBHO или спецификации изменились.Вам, конечно, понадобятся более высокие разрешения, измененные вручную в браузере, но, возможно, вам повезло, и это приложение для внутренней сети: D


    var adTypeBinary = 1;
    var adTypeText = 2;
    var adSaveCreateOverwrite = 2;
    var stream = new ActiveXObject("ADODB.Stream");
        stream.Type = adTypeText;
        stream.Charset = "utf-8";
        stream.Open();
        stream.Write(txt);
        stream.SaveToFile(path, adSaveCreateOverwrite);

(* этот код не проверялся, например, только)

0 голосов
/ 12 января 2011

Откройте блокнот, вставьте следующий код и сохраните файл со списком Кодировка , установленным на UTF-8 .Затем откройте файл в Internet Explorer, щелкните информационную панель под адресным окном, выберите «Разрешить заблокированное содержимое» под панелью инструментов и нажмите кнопку.Вы увидите, что диалоговое окно Сохранить HTML-документ имеет список Language , установленный на Unicode (UTF-8) .Я использую IE8.

  <input type="button" 
         value="Save As UTF-8 file"
         onclick="document.execCommand('SaveAs',false,'somename.html');" />

Если это не то, что вам нужно, предоставьте полный рабочий пример файла.Пожалуйста, удалите ненужные части.

0 голосов
/ 05 января 2011

Я сделал что-то подобное для текстового редактора. Команда exec является проприетарной (для IE). Это позволяет конечному пользователю сохранить текущую веб-страницу через диалоговое окно. Метатег не имеет никакого эффекта в этом. Если вы хотите, чтобы файл был сохранен как UTF-8, то создайте файл как UTF-8 . Откройте Блокнот, вставьте исходный код HTML и сохраните файл как HTML, но убедитесь, что вы изменили список Кодировка на UTF-8. Теперь откройте страницу в IE и вызовите команду exec, диалоговое окно предварительно выберет UTF-8.

0 голосов
/ 21 декабря 2010

Я думаю, вы создаете HTA ?

Для сохранения файла как UTF8

Запись текста UTF8 в файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...