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.
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); }
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);
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.
/// <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; }
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