• Lo de la codificación de caracteres utilizada por StreamReader.ReadToEnd()?
  • ¿Cuál sería la razón para usar (b) en lugar de (a) a continuación?
  • Hay un riesgo de que sean un problema de codificación de caracteres si (a) se utiliza
    en lugar de (b)?
  • Hay otro método que es mejor que (a) y (b)?

(a)

Dim strWebResponse As String
Dim Request As HttpWebRequest = WebRequest.Create(Url)
Using Response As WebResponse = smsRequest.GetResponse()
    Using reader As StreamReader = New StreamReader(Response.GetResponseStream())
        strWebResponse = reader.ReadToEnd()
    End Using
End Using

(b)

Dim encoding As New UTF8Encoding()
Dim strWebResponse As String
Dim Request As HttpWebRequest = WebRequest.Create(Url)
Using Response As WebResponse = Request.GetResponse()
    Dim responseBuffer(Response.ContentLength - 1) As Byte
    Response.GetResponseStream().Read(responseBuffer, 0, Response.ContentLength - 1)
    strWebResponse = encoding.GetString(responseBuffer)
End Using
InformationsquelleAutor CJ7 | 2012-11-12

3 Comentarios

  1. 10

    El estándar de codificación utilizado por StreamReader es De la codificación.Por defecto, que varían de una máquina a otra, dependiendo de su versión de Windows y la configuración regional que se han establecido. Encoding.UTF8.

    Tengo problemas para recordar lo que los valores predeterminados, por lo que prefiero usar el StreamReader constructor que me permite especificar la codificación. Por ejemplo:

    Using reader As StreamReader = New StreamReader(Response.GetResponseStream(), Encoding.UTF8)

    Ver el constructor de la documentación para obtener más información.

    Cuando se usa el constructor en el ejemplo, el resultado será el mismo que para el ejemplo b.

    Se debe utilizar la codificación UTF-8? Que depende de la página que estás descargando. Si la página a la que estás descargando fue codificado con UTF-8 y luego, sí, usted debe utilizar la codificación UTF-8. UTF-8 se supone que es el valor predeterminado si no es el conjunto de caracteres definidos en los encabezados HTTP. Pero es necesario comprobar la Content-Type encabezado para determinar si la página utiliza alguna otra codificación. Por ejemplo, el Content-Type encabezado puede leer:

     application/xml; charset=ISO-8859-2

    Tendría que examinar la ContentType propiedad de la HttpWebResponse, comprobar para ver si hay una charset campo, y establecer la codificación correctamente basándose en que.

    O, simplemente, utilizar UTF-8 y esperar lo mejor.

    • ¿Está usted de acuerdo con la primera respuesta que la codificación UTF8 debe ser utilizado?
    • No! La codificación predeterminada es no de la Codificación.Por defecto pero UTF-8, como se especifica en el, bueno, el constructor de la documentación :). Estoy de acuerdo en que era confuso que el de Microsoft llamado que la codificación por Defecto, cuando no es en realidad el defecto en .Net. Es de suponer que la justificación es que es el predeterminado para los mayores que no son Unicode programas nativos de Windows.
    • Estás en lo correcto. Yo estaba equivocado. Una versión antigua de la documentación utilizada para decir (incorrectamente) que utiliza Encoding.Default. Consulte informit.com/guides/content.aspx?g=dotnet&seqNum=163 para obtener más detalles. Voy a hacer la corrección.
    • Ver mi respuesta actualizado.
    • +1 para el recién respuesta corregido!
    • ¿dónde dice que es la predeterminada UTF-8? Todo lo que puedo ver es: The character encoding is set by the encoding parameter, and the buffer size is set to 1024 bytes. The StreamReader object attempts to detect the encoding by looking at the first three bytes of the stream. It automatically recognizes UTF-8, little-endian Unicode, and big-endian Unicode text if the file starts with the appropriate byte order marks. Otherwise, the user-provided encoding is used. See the Encoding.GetPreamble method for more information.
    • Consulte msdn.microsoft.com/en-us/library/yhfzs7at.aspx. «Este constructor inicializa la codificación a UTF8Encoding…»
    • mi error, yo estaba mirando el (Arroyo, Codificación) constructor.

  2. 0

    sí b es bueno porque UTF-8 will work with any ASCII document

    UTF8 es Unicode encoding type.

    Lo que es más importante su backwards compatible with ASCII,& la standard default for XML and HTML

    • Puedo hacer StreamReader.ReadToEnd usar UTF8?
  3. 0

    He encontrado una solución, no Es bonito, pero funciona.

    Primero usted tiene que establecer su StreamReader para DetectEncoding como verdadero,

    A continuación, poner un poco de carácter especial en su página.

    StreamReader lector = new StreamReader(responseStream, Sistema.Texto.De la codificación.Por defecto, true);

    <%@ Page Title=»FTP – Verificação» Language=»C#»

Dejar respuesta

Please enter your comment!
Please enter your name here