utf8 especiales entre diferencia caracteres xml unicode utf-8 utf-16

xml - especiales - utf-16 table



¿Qué es el carácter Unicode U+001A? Aka 0x1A (3)

El carácter U + 001A aparece con frecuencia en los mensajes de error relacionados con la codificación de caracteres. ¿Qué es el carácter U + 001A?


Ese es el código de control Ctrl + Z Es algo especial en Windows, que lo heredó de DOS, que lo heredó de CP / M. Su uso heredado fue como un marcador de fin de texto, similar a cómo se usa Ctrl + D en Unix.

Sin embargo, verlo en un mensaje de error o utilizarlo como el carácter alternativo para una conversión de codificación fallida es bastante inusual. Revisé dos veces el código y me aseguré de que no sea U + 003F o U + FFFD, los caracteres de respaldo más típicos de la codificación. O simplemente una peculiaridad del código específico con el que está tratando.


Por lo que puedo decir, U+001A es un personaje heredado en Unicode. Su única razón de existencia es que ya estaba definido en ASCII como el carácter sustituto ("... se usa en lugar de un carácter que se reconoce como no válido o erróneo o que no se puede representar en un dispositivo determinado") . También se usó a veces para finalizar un flujo de caracteres (que probablemente sea una fuente común de problemas)

En Unicode esa función es asumida por el CARÁCTER DE REEMPLAZO U + FFFD .


U + 001A se define en el Estándar de Unicode como un carácter de control con el nombre SUBSTITUTO, y pertenece a un grupo caracterizado de la siguiente manera, en el capítulo 16 del estándar: "Hay 65 puntos de código reservados en el Estándar de Unicode para compatibilidad con los códigos de control C0 y C1 definidos en el marco ISO / IEC 2022 [...] El Estándar Unicode proporciona el intercambio intacto de estos puntos de código, sin añadir ni restar de su semántica. La semántica de los códigos de control generalmente está determinada por la aplicación con la que se utilizan. Sin embargo, en ausencia de usos específicos de la aplicación, se pueden interpretar de acuerdo con la semántica de la función de control especificada en ISO / IEC 6429: 1992 ".

ISO 6429 es efectivamente equivalente a ECMA 48 , que menciona que este código también tiene el nombre corto SUB, y lo define de la siguiente manera: "SUB se usa en lugar de un carácter que se ha encontrado como no válido o erróneo. SUB está diseñado para ser introducido por medios automáticos ”. Esto refleja la definición de este código de control en Ascii .

Por lo tanto, en general, U + 001A se puede usar para indicar un error de datos a nivel de caracteres, como la presencia de bytes, en los datos de caracteres supuestos, que no tienen interpretación en la codificación de caracteres que se aplica. En términos generales, por lo tanto, significaría "datos de caracteres incorrectos", pero más adecuadamente "datos mal formados, al tratar de interpretar los datos como caracteres". Sin embargo, en Unicode, U + FFFD REPLACEMENT CHARACTER es más apropiado, ya que tiene una semántica específica de Unicode.

Dado que la pregunta se ha etiquetado con "xml", se debe tener en cuenta que en XML 1.0, U + 001A está prohibido, por la cláusula 2.2 Caracteres . Tenga en cuenta que el comentario "cualquier carácter Unicode, excluyendo los bloques sustitutos, FFFE y FFFF" es engañoso (pero los comentarios no son normativos); U + 001A es un carácter Unicode, aunque no es un carácter gráfico y su efecto no está definido en el Estándar Unicode.