如何在IE上使用JavaScript将UTF-8编码的文件写入用户的计算机?

时间:2010-12-13 06:06:15

标签: javascript internet-explorer

我正在使用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 个答案:

答案 0 :(得分:3)

Windows很可能会遇到一个问题,即Windows通常在utf-16上编码unicode,而浏览器并不关心任何替代方案。

你可以去ActiveX路线,FileSystemObject支持文本流的unicode格式标志,但我打赌它是相同的16编码。但是ADODB.Stream对象包含一个charset属性,可以设置为各种格式,包括utf-8

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

除此之外,我认为你最好的选择是写一个bho或改变规格。您当然需要在浏览器中手动更改更高的权限,但也许您很幸运,这是一个Intranet应用程序: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);

(*此代码未经测试,仅作为示例)

答案 1 :(得分:0)

我认为你正在创建HTA

将文件保存为UTF8

Writing UTF8 text to file

答案 2 :(得分:0)

我为文本编辑器做过类似的事情。 exec命令是专有的(对IE)。它允许最终用户通过对话框保存当前网页。元标记对此没有影响。如果您希望将文件保存为UTF-8,则将文件创建为UTF-8 。打开记事本,粘贴HTML源并将文件另存为HTML,但要确保将编码列表框更改为UTF-8。现在,在IE中打开页面并调用exec命令,对话框将预先选择UTF-8。

答案 3 :(得分:0)

打开记事本,粘贴以下代码,然后将编码列表框设置为 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');" />

如果这不是您想要的,请提供完整的工作示例文件。请删除不必要的部分。