Pregunta

no estoy muy profesional con codificaciones, pero esto es lo que creo que sé (aunque puede ser malo):

  1. ASCII es un 7 bits, la codificación de longitud fija, con los caracteres que se pueden encontrar en los gráficos ASCII.
  2. UTF8 es una codificación de 8 bits, de longitud variable. Todos los personajes pueden ser escritos en UTF-8.
  3. UCS-2 LE / BE son de longitud fija, codificaciones de 16 bits que admite caracteres más comunes.
  4. UTF-16 es una codificación de 16 bits, de longitud variable. Todos los personajes pueden ser escritos en UTF16.

Son aquellas por encima de los correctos?

Ahora, para las preguntas:

  1. las funciones de Windows "A" (como SetWindowTextA) tomar en cadenas de caracteres ASCII? O "cuerdas multi-byte" (más preguntas sobre esto más adelante)? ??
  2. Haga el Windows "W" funciones toman en cadenas UTF-16 o UCS-2 cadenas? Pensé que toman en UCS-2, pero los nombres me confunden.
  3. WideCharToMultiByte , Microsoft utiliza la palabra "cadena de caracteres anchos" en el sentido de UTF-16. En ese contexto, a continuación, lo que se considera una "cadena multi-byte"? UTF-8?
  4. ¿Es LPWSTR una "cadena de caracteres anchos"? Yo diría que es, pero entonces, no lo que quiere decir que sea UTF-16? Y ¿No significaría que se podría utilizar para caracteres de visualización, por ejemplo, de 4 bytes? Si no es así, entonces ... presenta caracteres de 4 bytes imposible? (Windows no parecen tener APIs para aquellos.)
  5. ¿Es la funcionalidad de WideCharToMultiByte un superconjunto de la de wcstombs, y hacer que ambos trabajan en el mismo tipo de cuerda? ¿O es que uno, por ejemplo, el trabajo en UTF-16, mientras que las otras obras sobre UCS-2?
  6. ¿Son rutas de archivo en UTF-16 o UCS-2? Sé de Windows trata como un "conjunto de caracteres opaca" de la documentación de Microsoft, pero según la norma C para funciones como fwprintf, ¿hay alguna codificación estandarizada?
  7. ¿Qué es la codificación "ANSI"? Es que incluso un término correcto? Y cómo se relaciona con ASCII?
  8. (que tenía más preguntas, pero esto es suficiente ... se me olvidó algunos de ellos de todos modos ...)

Estas son muchas preguntas, por lo que los enlaces a las explicaciones sobre cómo todos estos connect (aparte de la lectura del estándar Unicode, lo que no ayuda con la API de Windows de todos modos) también sería muy apreciada.

Gracias!

¿Fue útil?

Solución

Son aquellas por encima de los correctos?

Sí, si no se asume la existencia de caracteres no codificados en Unicode (para la mayoría de las aplicaciones prácticas, esta suposición está muy bien).

Foro de las funciones de Windows "A" (como SetWindowTextA) tomar en cadenas de caracteres ASCII? O "cuerdas multi-byte" (más preguntas sobre esto más adelante)? ??

Se llevan cadenas de bytes (es decir, las cadenas cuya unidad de código es un byte, que es siempre un octeto en Windows) codificada en el actual "ANSI" / MBCS / legado de codificación. "ANSI" son los términos históricos para estas codificaciones, pero no es correcto. Para los sistemas de Western de Windows, esta codificación es por lo general de Windows-1252.

Hacer el Windows "W" funciones toman en UTF-16 cuerdas o cadenas UCS-2? Pensé que toman en UCS-2, pero los nombres me confunden.

Desde Windows 2000, la mayoría de ellos soporta UTF-16. El nombre "amplia" y el resto de la terminología Microsoft (por ejemplo, "Unicode" que significa "UTF-16" o "UCS") fueron elegidos antes de la moderna estándar Unicode unificado la terminología.

En WideCharToMultiByte, Microsoft utiliza la palabra "cadena de caracteres anchos" en el sentido de UTF-16. En ese contexto, a continuación, lo que se considera una "cadena multi-byte"? UTF-8?

Cada dos soportes de codificación que WideCharToMultiByte es un "multi-byte de codificación" en este contexto, incluyendo Windows-1251 y UTF-8.

es LPWSTR una "cadena de caracteres anchos"? Yo diría que es, pero entonces, no lo que quiere decir que sea UTF-16? Y ¿No significaría que se podría utilizar para caracteres de visualización, por ejemplo, de 4 bytes? Si no es así, entonces ... presenta caracteres de 4 bytes imposible? (Windows no parecen tener APIs para aquellos.)

LPWSTR es un puntero a wchar_t que siempre es un entero sin signo de 16 bits en Windows. ¿Qué caracteres se pueden mostrar no guarda relación con la codificación, siempre y cuando que la codificación puede codificar todos los caracteres Unicode. Windows es generalmente capaz de mostrar caracteres que no son BMP, pero no en todas partes (por ejemplo, la consola no se puede).

¿Es la funcionalidad de WideCharToMultiByte un superconjunto de la de wcstombs, y hacer que ambos trabajan en el mismo tipo de cuerda? ¿O es que uno, por ejemplo, el trabajo en UTF-16, mientras que las otras obras sobre UCS-2?

No se sabe muy bien, pero creo que no difieren demasiado. Supongo que acaba de intentar convertir un poco de carácter no-BMP a UTF-8 y el aspecto de si el resultado es correcto.

¿Son rutas de archivo en UTF-16 o UCS-2? Sé de Windows trata como un "conjunto de caracteres opaca" de la documentación de Microsoft, pero según la norma C para funciones como fwprintf, ¿hay alguna codificación estandarizada?

Las rutas de archivos son de hecho las matrices opacas de caracteres UTF-16, lo que significa que Windows no realiza ningún tipo de traducción al almacenar o leer los nombres de archivo (como Linux ya diferencia de Mac OS X). Pero Windows todavía tiene su extraño comportamiento insensible caso sobre todo-indefinido que causa muchos problemas debido a los nombres de archivo que se tratan equivalente no son necesariamente iguales. Que se convierte en muchos invariantes; por ejemplo, en Linux sin interferencia de otros hilos, si se crea con éxito dos archivos A y a en algún directorio, que va a terminar con dos archivos distintos, mientras que en Windows se obtiene sólo un archivo (y, en general, un número impredecible de archivos).

¿Qué es la codificación "ANSI"? Es que incluso un término correcto? Y cómo se relaciona con ASCII?

ANSI es el organismo de normalización estadounidense. El uso de esta palabra cuando se refiere a la codificación es un término equivocado, pero una frecuente, por lo que debe ser consciente de ello. Yo prefiero el término legado de 8 bits de codificación , porque creo que es esencialmente lo que es: una codificación no Unicode que se mantiene sólo por compatibilidad con el legado (Windows 9x) applications. En los sistemas occidentales, se trata por lo general de Windows-1252, que es un superconjunto de ASCII adecuado.

Otros consejos

  1. * funciones A utilizado la página de códigos ANSI activo.

  2. * W uso función de UTF-16.

  3. Multi-byte se refiere a lo que se pasa en el parámetro de página de códigos. Es más comúnmente ya sea la página de códigos ANSI activo o UTF-8.

  4. LPWSTR es un UTF-16 de cadena que puede o no puede ser terminada en nulo (ver MSDN )

  5. No sé nada acerca de wcstombs, siempre uso WideCharToMultiByte.

  6. Las rutas de archivos están en UTF-16. De hecho todo el texto es UTF-16 internamente en Windows.

  7. Para la codificación ANSI tendrá que leer en el que, en cierto detalle. Que podría ser peor que empezar con Wikipedia y seguir los enlaces de allí.

Espero que ayude y que si lo he entendido mal cualquier cosa, cualquiera que conozca más, por favor haga esta edición para corregir cualquier error!

cuerdas anchas solían ser UCS-2. A partir de Windows 2000, las cadenas anchas son UTF-16. Bueno saber si necesita mantener algún sistema heredado de edad.

En primer lugar se puede encontrar mucha información en el este tema SO .

ASCII es un conjunto de caracteres, no se codifica. Ahora, hay una serie de juegos de caracteres de 8 bits, uno de ellos siendo establecidos por defecto en el sistema (se puede cambiar en la configuración regional). * A las funciones aceptan caracteres de 8 bits en ese juego de caracteres. UTF-8 no es un juego de caracteres, pero que codifica de Unicode charset. * Las funciones W, según tengo entendido, el uso de UTF-16 en lugar de UCS-2.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top