clasificación C # Codificación Pequeño (dos) .NET (C #): La codificación (codificación) y la marca de orden de bytes (BOM)

el uso de la codificación

Codificación de uso es relativamente sencillo, aunque sólo sea de carácter de byte y conversión mutua, GetBytes () y GetChars () Estos dos métodos, y su carga pesada serán básicamente satisfacer todas sus necesidades.

GetByteCount () está sobrecargado y el número de bytes reales obtenidos convierte en una cadena de bytes.

GetCharCount () y una carga pesada se convirtió en un tamaño de matriz de bytes de la cadena.

Ha de observarse que estos dos métodos: int GetMaxByteCount (int charCount); int GetMaxCharCount (int byteCount);

No es lo que se espera, si es un solo byte vuelve charCount, si es de doble byte de retorno chartCount * 2, pero chartCount + 1, (chartCount + 1) * 2.

            Console.WriteLine ( "El recuento de bytes máximo es {0}.", Encoding.Unicode.GetMaxByteCount (10)); 
            Console.WriteLine ( "El recuento de bytes máximo es {0}.", Encoding.ASCII.GetMaxByteCount (10));

Los resultados anteriores fueron 22 y 11, 20, 10 en su lugar. Yo estaba en un blog de Inglés para encontrar la causa de mi mala Inglés, que no entendía lo que es el alto sustituta sustituto y Baja: http://blogs.msdn.com/b/shawnste/archive/2005/03/02/383903 .aspx

       Por ejemplo, Encoding.GetEncoding (1252) .GetMaxByteCount (1) devuelve 2. 1252 es una sola página de código de bytes (que codifica), por lo general, sería de esperar que GetMaxByteCount (n) volvería n, pero no lo hace, por lo general retornos n + 1.

     Una razón para esta rareza es que un codificador podría almacenar un gran sustituto de una llamada a GetBytes (), con la esperanza de que la siguiente llamada es un sustituto baja. Esto permite que el mecanismo de reserva para proporcionar una reserva para un par suplente completa, incluso si ese par se divide entre llamadas a GetBytes (). Si el repliegue devuelve una? para cada medio de alquiler, o si la siguiente llamada no tiene un sustituto, a continuación, 2 caracteres podría ser la salida para ese par suplente. Así pues, en este caso, llamar Encoder.GetBytes () con un alto sustituta volvería 0 bytes y luego después de eso con otra llamada con sólo el sustituto de bajo volvería 2 bytes.

El código siguiente es la simple aplicación de codificación, puede imprimir los resultados, y luego se combinan con el sermón, y será cosechado.

Copiar el código
        estático de salida de vacío (que codifica la codificación, secuencia t) 
        { 
            Console.WriteLine (encoding.ToString ()); 
            byte [] buffer = encoding.GetBytes (t); 
            foreach (byte b en tampón) 
            { 
                Console.Write (b + "-"); 
            } 
            Cadena s = encoding.GetString (tampón); 
            Console.WriteLine (s); 
        }
Copiar el código
Copiar el código
            strTest cadena = "prueba我镕un有κ"; 
            Console.WriteLine (strTest); 
            Output (Encoding.GetEncoding ( "GB18030"), strTest); 
            Output (Encoding.Default, strTest); 
            Output (Encoding.UTF32, strTest); 
            Output (Encoding.UTF8, strTest); 
            Output (Encoding.Unicode, strTest); 
            Output (Encoding.ASCII, strTest); 
            Output (Encoding.UTF7, strTest);
Copiar el código

Acerca de la lista de materiales

nombre de lista de materiales es Byte marca de orden, es decir, una marca de orden de bytes, la sección binaria se utiliza para identificar lo que es una codificación de texto, como cuando se abre por el Bloc de notas un texto, si un texto en esta sección incluyen BOM, entonces puede ser determinada que la codificación de método que se adopte, y el método correspondiente decodificación, no se abrirá texto correctamente ilegible. Sin este período de lista de materiales, el Bloc de notas será por defecto ANSI abrir la posibilidad de que haya ser confusos. La codificación por el método GetPreamble () para determinar que codifica ninguna lista de materiales, en la actualidad sólo la siguiente 5 CLR Encoding han BOM.

UTF-8: EF BB BF

UTF-16 big endian: FE FF

UTF-16 Little Endian: FF FE

UTF-32 big endian: 00 00 FE FF

UTF-32 Little Endian: FF FE 00 00

propiedades estáticas de la codificación Unicode, UTF-8, UTF32 construido con la lista de materiales de codificación es el valor por defecto, y si desea escribir un texto (como archivos XML, lista de materiales si no, no será ilegible), la lista de materiales no quieren tomar, a continuación, ejemplos de los mismos debe,

Codificación de encodingUTF16 = nuevo UnicodeEncoding (false, false); // segundo parámetro debe ser como en false 

codifica la UTF8Encoding encodingUTF8 nuevos nuevos = (false); 

Encoding = encodingUTF32 nuevo nuevo UTF32Encoding (false, false); // segundo parámetro debe ser tan falso

 La relación entre el texto y el lector puede referirse a la lista de materiales de campo este blog, es más diciendo que no voy a repetir, el .NET (C #): La codificación (codificación) y la marca de orden de bytes (BOM)

 Analizando una codificación de texto

Dado un texto, no sabemos su formato de codificación, decodificación de Codificación cómo lo elegimos? La respuesta es juzgado de acuerdo con la lista de materiales al final qué tipo de Unicode, si no hay lista de materiales, esto es difícil de decir, esto fue de acuerdo a los archivos de texto de origen, y por lo general se utiliza Encoding.Default, esto se basa en la configuración actual del sistema y del retorno diferente valor. Si el archivo es de un amigos internacionales, es mejor que se utiliza para descifrar el UTF-8. El siguiente código en el archivo especificado no tiene una lista de materiales, no podemos garantizar su exactitud, si desea utilizar en su proyecto, asegúrese de prestar atención a esto.

Copiar el código
/// <summary> 
        /// Volver La codificación de un archivo de texto. Volver Encoding.Default si no Unicode 
        se encuentra // BOM (Byte marca de orden). 
        /// </ summary> 
        /// <param name = "nombre de archivo"> </ param> 
        /// <retornos> </ devoluciones> 
        public static Codificación GetFileEncoding (String filename) 
        { 
            Codificación Resultado = null; 
            FileInfo FI = nuevo FileInfo (filename); 
            FileStream FS = null; 
            tratar 
            { 
                FS = FI.OpenRead (); 
                Codificación de [] UnicodeEncodings = 
                {  
                    Encoding.BigEndianUnicode,
                    Encoding.Unicode,
                    Encoding.UTF8, 
                    Encoding.UTF32, 
                    nueva UTF32Encoding (true, true) 
                }; 
                for (int i = 0; Resultado == null && i <UnicodeEncodings.Length; i ++) 
                { 
                    FS.Position = 0; 
                    byte [] Preámbulo = UnicodeEncodings [i] .GetPreamble (); 
                    bool PreamblesAreEqual = true; 
                    for (int j = 0; PreamblesAreEqual && j <Preamble.Length; j ++) 
                    { 
                        PreamblesAreEqual = Preámbulo [j] == FS.ReadByte (); 
                    }
                    // o Array.Equals utilizar para comparar dos matrices. 
                    // fs.Read (buf, 0, Preamble.Length); 
                    // PreamblesAreEqual = Array.Equals (Preámbulo, buf) 
                    si (PreamblesAreEqual) 
                    { 
                        resultado = UnicodeEncodings [i]; 
                    } 
                } 
            } 
            Catch (System.IO.IOException ex) 
            { 
                ex tiro; 
            } 
            Finalmente 
            { 
                si (FS! = Null) 
                { 
                    FS.Close (); 
                }
            } 
            Si (resultado == null) 
            {
                Resultado = Encoding.Default; 
            } 
            Return resultado; 
        }
Copiar el código

Continuará. . . .

La siguiente sección trata principalmente de codificador y decodificador

Por cierto, cuando se edita el blog, el artículo se veía muy hermoso, cuando el número de formatos de previsualización se han ido? Ah bueno fea

Supongo que te gusta

Origin www.cnblogs.com/bdqczhl/p/12445206.html
Recomendado
Clasificación