2010-12-13 4 views
10

Estoy escribiendo un archivo local usando JavaScript y estoy usando IE para el mismo.¿Cómo puedo escribir un archivo con codificación UTF-8 en la computadora del usuario usando JavaScript en IE?

Mi código es el siguiente:

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; 
} 

El problema que estoy enfrentando es el archivo no está recibiendo guardado como un archivo codificado en UTF-8, aunque he añadido <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> a ella.

Ayúdeme al respecto o sugiera alguna alternativa para mí.

NOTA: Me gustaría abrir un administrador de archivos antes de que se guarde el archivo como en el caso de execCommand.

+1

IE le permite guardar en la máquina local a través de JavaScript? : P – alex

+5

@alex: IE + ActiveX: muchos trucos (no portables) ;-) – darioo

+0

permite muchísimas cosas usando Active X ... que son tan complicadas en sí mismas y no son compatibles con otros navegadores :(... . hace que la vida de los desarrolladores sea horrible: P – Varun

Respuesta

3

Lo más probable es que tenga un problema con el hecho de que Windows normalmente codifica unicode en utf-16 y al navegador no le importa considerar ninguna alternativa.

Puede ir a la ruta ActiveX, FileSystemObject admite un indicador de formato Unicode para secuencias de texto, pero apostaría a que es la misma codificación 16. El objeto ADODB.Stream sin embargo contiene una propiedad juego de caracteres que se puede ajustar a una variedad de formatos, incluyendo UTF-8

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

Fuera de eso creo que la mejor opción sería escribir un BHO o que tengan las especificaciones cambiado Usted, por supuesto, necesita permisos superiores cambiado manualmente en el navegador, pero a lo mejor tienes suerte y esta es una aplicación de 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); 

(* este código no se probó, por ejemplo solamente)

0

Creo que estás creando HTA?

Para guardar archivos como UTF8

Writing UTF8 text to file

+0

ambos enlaces sugirieron que no me ayudó ... el segundo parece útil, pero necesita una ruta y no se mostrará guardar como cuadro de diálogo :(que es el requisito principal del código – Varun

0

he hecho algo como esto por un editor de texto. El comando exec es propietario (a IE). Permite al usuario final guardar la página web actual a través de un cuadro de diálogo. La metaetiqueta no tiene ningún efecto en esto. Si desea que el archivo se guarde como UTF-8, entonces cree el archivo como UTF-8. Abra el Bloc de notas, pegue el código fuente HTML y guarde el archivo como HTML, pero asegúrese de cambiar el cuadro de lista Encoding a UTF-8. Ahora, abra la página en IE e invoque el comando exec, el cuadro de diálogo habría preseleccionado UTF-8.

+0

esto lo sé pero esto no servirá para nada ... – Varun

+0

Si usted proporciona una fuente HTML de muestra que demuestra el problema en IE, tal vez se puede resolver. – BZ1

+0

No tiene preseleccionado UTF-8 de hecho no tiene ninguna codificación mencionada allí – Varun

0

Abrir el bloc de notas, pegue el código siguiente y guarde el archivo con el cuadro de lista Codificación conjunto de UTF-8. A continuación, abra el archivo en Internet Explorer, haga clic en la barra de información debajo del cuadro de dirección, elija "Permitir contenido bloqueado" debajo de la barra de herramientas y haga clic en el botón. Verá que el cuadro de diálogo Guardar documento HTML tiene la lista Idioma establecida en Unicode (UTF-8). Estoy usando IE8.

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

Si esto no es lo que desea, proporcione un archivo de muestra de trabajo completo. Por favor, elimine las partes innecesarias.

+0

lo probé y funciona bien ... pero el fragmento de código i dado que doesnt salva la página normal, toma el resultado de la página y genera una página ficticia e intenta guardarla, por lo que hay una manera de hacer lo mismo, consulte el código completo proporcionado anteriormente – Varun

+0

Publique el código completo con etiquetas HTML. De lo contrario, es difícil distinguir a qué elementos se refiere. – BZ1

Cuestiones relacionadas