[RESUELTO] Cómo cambiar codificación Ansi a UTF-8

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
mustallar
Mensajes: 8
Registrado: Sab Mar 28, 2020 10:35 am

[RESUELTO] Cómo cambiar codificación Ansi a UTF-8

Mensaje por mustallar »

Hola a todos desde A Coruña,

soy nuevo por este foro, hace como 7-8 años que no programo nada en Basic y estoy un poco oxidado

hace años desarrollé una aplicación para mi trabajo que a día de hoy sigo usando. Con esto del Covid-19 y el encierro que estamos sufriendo, me ha quedado tiempo para volver a toquetear un poco otra vez el código y me ha surgido un problema.

Necesito cambiar la codificación de un archivo.txt que creo, por defecto me lo crea en ANSI y necesitaría cambiarlo a UTF-8 (he buscado por el foro pero no me he sido capaz de ver la solución)
la funcíon con la que creo el archivo txt es las siguiente:

Código: Seleccionar todo

'lista() -> array de lineas a incluir en el txt
'nmb -> nombre del archivo
function genera_txt(lista() as string,nmb as string) as integer
	On Error Goto ManejadorError
		dim i as integer, file as integer, archivo as string
		archivo = url_carpeta_vcar & nmb
		file = freefile
		open archivo for output as #file
		for i=0 to ubound(lista())
			print #file,lista(i)
		next i
		close #file
		genera_txt() = 1
		Exit function
	ManejadorError:
		Reset
		genera_txt() = 0
end function

¿Alguien me puede echar una mano?

Gracias de antemano.
Última edición por mustallar el Dom Mar 29, 2020 12:06 am, editado 1 vez en total.
Window 10 - OpenOffice 4.14
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Cómo cambiar codificación Ansi a UTF-8 en archivo txt

Mensaje por mauricio »

¿Estas usando las versiones indicadas en tu firma?

En mi entorno de trabajo, cuando los valores a exportar contienen solo valores ASCII, el archivo resultante es ASCII, cuando los valores contienen valores no ASCII, el archivo resultante siempre es UTF8.

Código: Seleccionar todo

mau@oficina:~  : file -bi archivo1.txt
text/plain; charset=us-ascii

mau@oficina:~  : file -bi archivo2.txt
text/plain; charset=utf-8
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
mustallar
Mensajes: 8
Registrado: Sab Mar 28, 2020 10:35 am

Re: Cómo cambiar codificación Ansi a UTF-8 en archivo txt

Mensaje por mustallar »

Hola Mauricio, gracias por contestar tan rápido, si, uso Win10 y OO4.13. Y con ese código me lo guarda siempre como Ansi.
Window 10 - OpenOffice 4.14
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Cómo cambiar codificación Ansi a UTF-8 en archivo txt

Mensaje por PepeOooSevilla »

Hola.
Haz pruebas con este código, es el que yo utilizo en mi trabajo para guardar TXT en UTF-8.
Obviamente tendrás que cambiar, por lo menos, la ruta del archivo. :D

Código: Seleccionar todo

REM  *****  BASIC  *****
Option Explicit

Sub GuardarArchivoTextoUTF8()
	Dim oSFA As Object	'Servicio SimpleFileAccess
	Dim Archivo As String	'Ruta y nombre del archivo a grabar
	Dim oStream As Object	 'Canal de transmisión de SimpleFileAccess
	Dim oTextStream As Object	 'Servicio TextStream
	Dim Soneto() As Variant	'Texto a escribir
	Dim Contador As Integer	'Bucle For
	Dim NUEVALINEA As String	'CR y LF para indicar el fin de línea
	
	NUEVALINEA = Chr(13) & Chr(10)

	Soneto() = Array("¡Oh quién tuviera, hermosa Dulcinea,", _
					"por más comodidad y más reposo,", _
					"a Miraflores puesto en el Toboso,", _
					"y trocara su Londres con tu aldea!", _
					"¡Oh quién de tus deseos y librea", _
					"alma y cuerpo adornara, y del famoso", _
					"caballero, que hiciste venturoso,", _
					"mirara alguna desigual pelea!", _
					"¡Oh quién tan castamente se escapara", _
					"del señor Amadís, como tú hiciste", _
					"del comedido hidalgo Don Quijote!", _
					"Que así envidiada fuera, y no envidiara,", _
					"y fuera alegre al tiempo que fue triste,", _
					"y gozara los gustos sin escote.")

	'¡ATENCIÓN! Cambia la ruta del archivo ¡ATENCIÓN!
	Archivo = ConvertToURL("D:\PEPE\FORO\SONETO_QUIJOTE.TXT")
	oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
	'Canal para escritura
	oTextStream = CreateUnoService("com.sun.star.io.TextOutputStream")
	'¡ATENCIÓN! Si el archivo existe, bórralo ¡ATENCIÓN!
	If oSFA.exists(Archivo) Then
		oSFA.kill(Archivo)
	End If
	' Abre el archivo para escritura
	oStream = oSFA.openFileWrite(Archivo)
	'Pasamos el archivo al canal
	oTextStream.setOutputStream(oStream)
	'El texto lo queremos codificado en UTF-8
	oTextStream.setEncoding("UTF-8")
	'Escribe las líneas. Deben finalizar con los caracteres fin de línea
	'En Windows Chr(13) y Chr(10)
	For Contador = LBound(Soneto) To UBound(Soneto)
		oTextStream.writeString(Soneto(Contador) & NUEVALINEA)
	Next
	'Cierra el canal de transmisión para escritura
	oTextStream.closeOutput()
End Sub
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
mustallar
Mensajes: 8
Registrado: Sab Mar 28, 2020 10:35 am

Re: [Resuelto]Cómo cambiar codificación Ansi a UTF-8

Mensaje por mustallar »

Perfecto, esto si funciona. Muchas gracias PepeOooSevilla.
Window 10 - OpenOffice 4.14
Responder