Sistema de codificación de archivos

10/12/2003 - 09:58 por Oscar Rodriguez | Informe spam
Hola a todos.
Me gustaría saber si existe algún método para averiguar la codificación de
un archivo en .net, es decir si presenta una codificación ASCII, UTF-8 o
UNICODE. Ya que a la hora de abrir un fichero hay que especificar la
codificación que usa este para trabajar correctamente sobre él.
Gracias por adelantado

Preguntas similare

Leer las respuestas

#6 Oscar Rodriguez
12/12/2003 - 11:36 | Informe spam
Por fin consegui la solución.
El problema surgia con la codificación ANSI actual del sistema. Cuando
StreamReader lee un documento es capaz de distinguir UTF-8, UNICODE y
UNICODE BIG ENDIAN, pero no ANSI.
Esto se debe a que ANSI a diferencia del resto de codificaciones no tiene
un encabezado de bytes que lo hagan unico.
Aqui la solución:
Imports System.IO

Imports System.Text

''''''''''''''''''''''''''''''''

' INFORMACION '

''''''''''''''''''''''''''''''''

'UNICODE '

' Primer byte 255 '

' Segundo byte 254 '

' '

'UNICODE BIG ENDIAN '

' Primer byte 254 '

' Segundo byte 255 '

' '

'UTF-8 '

' Primer byte 239 '

' Segundo byte 187 '

' Tercer byte 191 '

' '

'ANSI '

' No presenta coincidencias '

' '

''''''''''''''''''''''''''''''''

Public Class GetCodeDocument

Private Const [Byte255] As Byte = 255

Private Const [Byte254] As Byte = 254

Private Const [Byte239] As Byte = 239

Private Const [Byte191] As Byte = 191

Private Const [Byte187] As Byte = 187

Public Function GetEncoding(ByVal Path As String) As Encoding

Dim [Encoding] As Encoding

Dim fs As New FileStream(Path, FileMode.Open, FileAccess.Read)

Dim ByteArray(2) As Byte

fs.Read(ByteArray, 0, 3)

fs.Close()

Select Case ByteArray(0)

Case [Byte239]

If ByteArray(1).Equals([Byte187]) And ByteArray(2).Equals([Byte191]) Then

[Encoding] = Encoding.UTF8

Else

[Encoding] = Encoding.Default

End If

Case [Byte254]

If ByteArray(1).Equals([Byte255]) Then

[Encoding] = Encoding.BigEndianUnicode

Else

[Encoding] = Encoding.Default

End If

Case [Byte255]

If ByteArray(1).Equals([Byte254]) Then

[Encoding] = Encoding.Unicode

Else

[Encoding] = Encoding.Default

End If

Case Else

[Encoding] = Encoding.Default

End Select

Return [Encoding]

End Function


"Alberto Ortiz" escribió en el mensaje
news:
Hola.
Mira en la ayuda: Encoding.GetPreamble



aoe(arroba)euskalnet.net
www.euskalnet.net/aoe



"Oscar Rodriguez" escribió en el mensaje


news:
> El problema es que el programa no solo tiene que funcionar para XML sino
> para cualquier tipo de documento.
> Lo que pretendo hacer es que valga para cualquier tipo de documento,


además
> los documentos sobre los que trabaje ya sea un simple documento de texto


no
> tienen que cumplir con ningún patron.
> Gracias de todas formas por el interés mostrado
>
> "Pablo O. Abbate" escribió en el


mensaje
> news:Ozds%
> > El .NET Framework ofrece un namespace completo para tratar archivos


XML
> > mediante sus propias clases. Las encontrarás en System.XML,
> > System.XML.Schema, etc.
> >
> > Estas clases te permiten manejar documentos XML como tales, sin la
> necesidad
> > de tratarlos como archivos de texto. Puedes utilizar XmlTextReader


para
> leer
> > el contenido de los nodos de un documento, XMLValidatingReader para
> validar
> > el documento o bien utilizar XPath para acceder a nodos claves dentro


del
> > documento y existen muchas clases más...
> >
> > Esto evita que te lies con la codificación del documento, dado que


quien
> la
> > realiza es .NET.
> > La ayuda en línea ofrece muy buenos ejemplos al respecto.
> >
> > Te envío un ejemplo de código escrito por MS para que lo mires:
> >
> > namespace HowTo.Samples.XML
> > {
> >
> > using System;
> > using System.IO;
> > using System.Xml;
> >
> > public class LoadXmlDocumentSample
> > {
> > private const String document = "books.xml";
> >
> > public static void Main()
> > {
> > LoadXmlDocumentSample myLoadXmlDocumentSample = new
> > LoadXmlDocumentSample();
> > myLoadXmlDocumentSample.Run(document);
> > }
> >
> > public void Run(String args)
> > {
> > try
> > {
> > // Load the XML from file
> > Console.WriteLine ();
> > Console.WriteLine ("Cargar el archivo {0}...", args);
> >
> > XmlDataDocument myXmlDocument = new XmlDataDocument();
> > myXmlDocument.Load (args);
> >
> > Console.WriteLine ("Los datos XML se han cargado


correctamente
> > en el objeto XmlDataDocument...");
> >
> > // Display the XML document.
> > myXmlDocument.Save(Console.Out);
> > }
> > catch (Exception e)
> > {
> > Console.WriteLine ("Excepcin: {0}", e.ToString());
> > }
> > }
> >
> > } // End class LoadXmlDocumentSample
> > } // End namespace HowTo.Samples.XML
> >
> >
> > Un saludo.
> >
> >
> > Pablo O. Abbate
> > MCDBA - MCAD - MCSD - MCT
> > www.auladat.es
> >
> >
> >
> > "Oscar Rodriguez" escribió en el mensaje
> > news:
> > > Me refiero a cualquier fichero de texto plano independientemente de


la
> > > codificacion que use este
> > >
> > > Esto es un ejemplo de una utilidad para remplazar texto en archivos


xml.
> > en
> > > este caso puedo saber normalmente la codificacion que tienen ya que


esta
> > se
> > > suele ser la primera linea, pero no siempre ocurre
> > >
> > > El motivo de abrilo con la codificación adecuada sirve para que


trate
> bien
> > > las tildes de las palabras.
> > > For Each item In listArchivos.Items
> > >
> > > If item.Checked = True Then
> > >
> > > Select Case item.SubItems(2).Text
> > >
> > > Case "UTF-8"
> > >
> > > t = New System.IO.StreamReader(item.SubItems(1).Text,
> > > System.Text.Encoding.UTF8)
> > >
> > > Case "ASCII"
> > >
> > > t = New System.IO.StreamReader(item.SubItems(1).Text,
> > > System.Text.Encoding.Default)
> > >
> > > Case "UNICODE"
> > >
> > > t = New System.IO.StreamReader(item.SubItems(1).Text,
> > > System.Text.Encoding.Unicode)
> > >
> > > End Select
> > >
> > > sLine = t.ReadToEnd
> > >
> > > t.Close()
> > >
> > > Dim odr As DataRow
> > >
> > > For Each odr In odt.Rows
> > >
> > > Dim stringtosearch As String
> > >
> > > Dim stringtoreplace As String
> > >
> > > stringtosearch = odr.Item(1).ToString
> > >
> > > stringtoreplace = odr.Item(2).ToString
> > >
> > > sLine = sLine.Replace(stringtosearch, stringtoreplace)
> > >
> > > Next
> > >
> > > Dim sw As StreamWriter = New StreamWriter(item.SubItems(1).Text)
> > >
> > > sw.Write(sLine)
> > >
> > > sw.Close()
> > >
> > > End If
> > >
> > > Next
> > >
> > > "Pablo O. Abbate" escribió en el
> mensaje
> > > news:
> > > > Oscar:
> > > >
> > > > ¿A que tipo de archivo te refieres?
> > > > ¿Podrías enviar un ejemplo del código que utilizas para abrir


dicho
> > > archivo?
> > > >
> > > >
> > > >
> > > > Pablo O. Abbate
> > > > MCDBA - MCAD - MCSD - MCT
> > > > www.auladat.es
> > > >
> > > > "Oscar Rodriguez" escribió en el mensaje
> > > > news:
> > > > > Hola a todos.
> > > > > Me gustaría saber si existe algún método para averiguar la
> > codificación
> > > de
> > > > > un archivo en .net, es decir si presenta una codificación ASCII,
> UTF-8
> > o
> > > > > UNICODE. Ya que a la hora de abrir un fichero hay que


especificar la
> > > > > codificación que usa este para trabajar correctamente sobre él.
> > > > > Gracias por adelantado
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida