No dejes de compartir nuestros tutoriales y códigos en tus redes, necesitamos de tu ayuda para hacer crecer nuestra comunidad.
Solución:
También tengo el mismo problema: tengo que exportar datos de Excel (Office 2003, VBA6.5) a un archivo codificado en UTF-8. ¡Encontré la respuesta de tu pregunta! Debajo de mi ejemplo, donde también elimino la lista de materiales usando el truco n. ° 2 de la respuesta de boost (¡gracias!). No conseguí que el #1 funcionara y nunca probé el #3.
Sub WriteUTF8WithoutBOM()
Dim UTFStream As Object
Set UTFStream = CreateObject("adodb.stream")
UTFStream.Type = adTypeText
UTFStream.Mode = adModeReadWrite
UTFStream.Charset = "UTF-8"
UTFStream.LineSeparator = adLF
UTFStream.Open
UTFStream.WriteText "This is an unicode/UTF-8 test.", adWriteLine
UTFStream.WriteText "First set of special characters: öäåñüûú€", adWriteLine
UTFStream.WriteText "Second set of special characters: qwertzuiopõúasdfghjkléáûyxcvbnm|Ä€Í÷×äðÐ[]í³£;?¤>#&@<;>*~¡^¢°²`ÿ´½¨¸0", adWriteLine
UTFStream.Position = 3 'skip BOM
Dim BinaryStream As Object
Set BinaryStream = CreateObject("adodb.stream")
BinaryStream.Type = adTypeBinary
BinaryStream.Mode = adModeReadWrite
BinaryStream.Open
'Strips BOM (first 3 bytes)
UTFStream.CopyTo BinaryStream
'UTFStream.SaveToFile "d:adodb-stream1.txt", adSaveCreateOverWrite
UTFStream.Flush
UTFStream.Close
BinaryStream.SaveToFile "d:adodb-stream2.txt", adSaveCreateOverWrite
BinaryStream.Flush
BinaryStream.Close
End Sub
La referencia de ADO Stream Object que utilicé.
Si alguien más tiene problemas con la constante adTypeText, debe incluir “Microsoft ActiveX Data Objects 2.5 Object Library” en Herramientas->Referencias.
Algunas posibilidades:
-
Coloque el texto en el búfer como UTF-8, Tipo = 2, pero luego configure Tipo = 1 (como binario) y escríbalo. Eso podría convencer a ADODB.Stream de omitir la adición de la lista de materiales.
-
Cree otro búfer, como tipo binario, y use CopyTo para copiar los datos a ese búfer desde un punto posterior a la lista de materiales.
-
Lea el archivo nuevamente usando Scripting.FileSystemObject, recorte la lista de materiales, escriba nuevamente
valoraciones y comentarios
Te invitamos a añadir valor a nuestro contenido cooperando tu veteranía en las explicaciones.