Как я могу написать файл с кодировкой UTF-8 на компьютер пользователя, используя JavaScript в IE?
Я пишу локальный файл с использованием 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
.
Ответы
Ответ 1
Скорее всего, у вас есть проблема с тем, что 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);
(* этот код не был протестирован, например, только)
Ответ 2
Я думаю, что вы создаете HTA?
Для сохранения файла как UTF8
Написание текста в формате UTF8
Ответ 3
Я сделал что-то подобное для текстового редактора. Команда exec является собственностью (для IE). Это позволяет конечному пользователю сохранять текущую веб-страницу через диалоговое окно. Мета-тег не влияет на это. Если вы хотите сохранить файл как UTF-8, тогда создайте файл как UTF-8. Откройте "Блокнот", вставьте источник HTML и сохраните файл как HTML, но убедитесь, что вы изменили список Кодировка на UTF-8. Теперь откройте страницу в IE и вызовите команду exec, диалоговое окно предварительно выбрало UTF-8.
Ответ 4
Откройте блокнот, вставьте следующий код и сохраните файл с Кодовым списком, установленным в UTF-8. Затем откройте файл в Internet Explorer, щелкните панель информации под адресом, выберите "Разрешить заблокированное содержимое" под панелью инструментов и нажмите кнопку. Вы увидите, что диалоговое окно Сохранить HTML-документ имеет список Язык, установленный в Unicode (UTF-8). Я использую IE8.
<input type="button"
value="Save As UTF-8 file"
onclick="document.execCommand('SaveAs',false,'somename.html');" />
Если это не то, что вы хотите, укажите полный рабочий пример файла. Удалите ненужные детали.