Sistema.Texto.De la codificación.GetEncoding(“iso-8859-1”) lanza PlatformNotSupportedException?

Ver tema, tenga en cuenta que esta pregunta sólo se aplica a la .NET compacto marco. Esto sucede en los emuladores que se suministran con Windows Mobile 6 Profesional SDK tan bien como en mi inglés HTC Touch Pro (todos los .NET CF 3.5). iso-8859-1 es Europeo Occidental (ISO), que es probablemente la más importante de codificación, además de us-ascii (al menos cuando uno va por el número de usenet).

Estoy teniendo un tiempo difícil comprender por qué esta codificación no es compatible, mientras que los siguientes son compatibles (de nuevo, en tanto los emuladores & mi HTC):

  • iso-8859-2 (Central Europeo (ISO))
  • iso-8859-3 (latina 3 (ISO))
  • iso-8859-4 (Báltico (ISO))
  • iso-8859-5 (Cirílico (ISO))
  • iso-8859-7 (griego (ISO))

Así, es el soporte para el decir griego más importante de apoyo para el alemán, el francés
y en español? ¿Alguien puede arrojar algo de luz sobre esto?

Gracias!

Andreas

OriginalEl autor Andreas Huber | 2008-12-29

5 respuestas

  1. 15

    Me gustaría probar a usar “windows-1252” como la codificación de la cadena. De acuerdo a Wikipedia, Windows-1252 es un superconjunto de ISO-8859-1.

    System.Text.Encoding.GetEncoding(1252)
    Hola, Este enfoque es muy engorroso en algunas situaciones, por ejemplo, cuando usted tiene una secuencia XML con un ISO-8859-1 de la codificación. Usted necesitaría para reemplazar la codificación “iso-8859-1” con “windows-1252” antes de la alimentación para el lector de XML.
    He intentado esto, pero no funciona con CF3.5

    OriginalEl autor splattne

  2. 6

    Este artículo de MSDN dice:

    El .NET Compact Framework soporta
    codificación de caracteres en todos los dispositivos:
    Unicode (y LE), UTF8, UTF7, y
    ASCII.

    Existe un apoyo limitado para el código de la página
    codificación y sólo si la codificación es
    reconocido por el sistema operativo de
    el dispositivo.

    El .NET Compact Framework genera una
    PlatformNotSupportedException si el
    se requiere la codificación no está disponible en
    el dispositivo.

    Creo que todos (o al menos muchos) de la ISO codificaciones son de código de la página de codificaciones y caer bajo el “apoyo limitado de la regla”. UTF8 es probablemente su mejor apuesta como un reemplazo.

    Hola parece Que ninguno de los enlaces páginas que contienen información que podría responder a la pregunta “¿por Qué es ISO-8859-7 apoyar ISO-8859-1 no lo es?”
    Yo pensaba que el “soporte limitado para el código de la página de apoyo a” la envolvió en lugar de forma sucinta, a mí mismo. Creo que usted está atascado con el uso de UTF-8.

    OriginalEl autor Otis

  3. 3

    Sé que es un poco tarde pero he hecho una aplicación para .net cf de la codificación ISO-8859-1, espero que esto podría ayudar a:

    namespace System.Text
    {
    public class Latin1Encoding : Encoding
    {
    private readonly string m_specialCharset = (char) 0xA0 + @"¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ";
    public override string WebName
    {
    get { return @"ISO-8859-1"; }
    }
    public override int CodePage
    {
    get { return 28591; }
    }
    public override int GetByteCount(char[] chars, int index, int count)
    {
    return count;
    }
    public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
    {
    if (chars == null)
    throw new ArgumentNullException(@"chars", @"null array");
    if (bytes == null)
    throw new ArgumentNullException(@"bytes", @"null array");
    if (charIndex < 0)
    throw new ArgumentOutOfRangeException(@"charIndex");
    if (charCount < 0)
    throw new ArgumentOutOfRangeException(@"charCount");
    if (chars.Length - charIndex < charCount)
    throw new ArgumentOutOfRangeException(@"chars");
    if (byteIndex < 0 || byteIndex > bytes.Length)
    throw new ArgumentOutOfRangeException(@"byteIndex");
    for (int i = 0; i < charCount; i++)
    {
    char ch = chars[charIndex + i];
    int chVal = ch;
    bytes[byteIndex + i] = chVal < 160 ? (byte)ch : (chVal <= byte.MaxValue ? (byte)m_specialCharset[chVal - 160] : (byte)63);
    }
    return charCount;
    }
    public override int GetCharCount(byte[] bytes, int index, int count)
    {
    return count;
    }
    public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
    {
    if (chars == null)
    throw new ArgumentNullException(@"chars", @"null array");
    if (bytes == null)
    throw new ArgumentNullException(@"bytes", @"null array");
    if (byteIndex < 0)
    throw new ArgumentOutOfRangeException(@"byteIndex");
    if (byteCount < 0)
    throw new ArgumentOutOfRangeException(@"byteCount");
    if (bytes.Length - byteIndex < byteCount)
    throw new ArgumentOutOfRangeException(@"bytes");
    if (charIndex < 0 || charIndex > chars.Length)
    throw new ArgumentOutOfRangeException(@"charIndex");
    for (int i = 0; i < byteCount; ++i)
    {
    byte b = bytes[byteIndex + i];
    chars[charIndex + i] = b < 160 ? (char)b : m_specialCharset[b - 160];
    }
    return byteCount;
    }
    public override int GetMaxByteCount(int charCount)
    {
    return charCount;
    }
    public override int GetMaxCharCount(int byteCount)
    {
    return byteCount;
    }
    }
    }

    OriginalEl autor hdkrus

  4. 0

    Es extraño que 8859-1 no es compatible, sino que dijo: UTF-8 tiene la capacidad de representar a todos los de la 8859-1 personajes (y más), por lo que hay una razón que usted no sólo puede utilizar UTF-8 en lugar de eso? Eso es lo que hacemos internamente, y acabo de tratado casi de este mismo tema el día de hoy. El lado positivo del uso de UTF-8, es que usted consiga el apoyo para el lejano oriente y cirílico sin hacer modificaciones y sin añadir peso a las lenguas occidentales.

    No veo cómo UTF-8 “contiene” iso-8859-1. En el primero, sólo el puro caracteres ASCII pueden ser codificados en un byte, en el último también caracteres como, por ejemplo, Ä puede ser codificado en un byte. Así que si usted tiene un archivo codificado en ISO-8859-1 usted no puede leer correctamente con la codificación UTF-8.
    Ah, ya veo – tiene texto, ya codificado. Yo estaba pensando que simplemente necesitaba un mecanismo para la codificación de todos estos chanracters
    Parece que va a ser manualmente la conversión de los archivos, a continuación,. La buena suerte.

    OriginalEl autor ctacke

  5. 0

    Si alguien está recibiendo una excepción.NET compact framework) como:

     System.Text.Encoding.GetEncoding(“iso-8859-1”) throws PlatformNotSupportedException,
    //Please follow the steps: 
    byte[] bytes=Encoding.Default.GetBytes(yourText.ToString);
    //The code is:
    FileInfo fileInfo = new FileInfo(FullfileName); //file type :  *.text,*.xml 
    string yourText = (char) 0xA0 + @"¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ";
    using (FileStream s = fileInfo.OpenWrite()) {
    s.Write(Encoding.Default.GetBytes(yourText.ToString()), 0, yourText.Length);
    }

    OriginalEl autor Prasad KM

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *