Character sets and encodings
Esta página describe varios conjuntos de caracteres especificados por el estándar C++.
Conjunto de caracteres de traducciónEl conjunto de caracteres de traducción consiste en los siguientes elementos:
El conjunto de caracteres de traducción es un superconjunto del conjunto de caracteres básico y del conjunto de caracteres literales básicos (ver más abajo). |
(desde C++23) |
Conjunto de caracteres básico
El conjunto básico de caracteres consiste en los siguientes 96 (until C++26) 99 (since C++26) caracteres:
| Punto de código | Carácter | Glifo |
|---|---|---|
| U+0009 | Tabulación de caracteres | |
| U+000B | Tabulación de línea | |
| U+000C | Alimentación de formulario (FF) | |
| U+0020 | Espacio | |
| U+000A | Alimentación de línea (LF) | nueva línea |
| U+0021 | Signo de exclamación |
!
|
| U+0022 | Comillas |
"
|
| U+0023 | Signo de número |
#
|
| U+0025 | Signo de porcentaje |
%
|
| U+0026 | Et |
&
|
| U+0027 | Apóstrofe |
'
|
| U+0028 | Paréntesis izquierdo |
(
|
| U+0029 | Paréntesis derecho |
)
|
| U+002A | Asterisco |
*
|
| U+002B | Signo más |
+
|
| U+002C | Coma |
,
|
| U+002D | Guion |
-
|
| U+002E | Punto |
.
|
| U+002F | Barra oblicua |
/
|
| U+0030 .. U+0039 | Dígito cero .. nueve |
0 1 2 3 4 5 6 7 8 9
|
| U+003A | Dos puntos |
:
|
| U+003B | Punto y coma |
;
|
| U+003C | Signo menor que |
<
|
| U+003D | Signo igual |
=
|
| U+003E | Signo mayor que |
>
|
| U+003F | Signo de interrogación |
?
|
| U+0041 .. U+005A | Letra latina mayúscula A .. Z |
A B C D E F G H I J K L M
|
| U+005B | Corchete izquierdo |
[
|
| U+005C | Barra invertida |
\
|
| U+005D | Corchete derecho |
]
|
| U+005E | Acento circunflejo |
^
|
| U+005F | Guion bajo |
_
|
| U+0061 .. U+007A | Letra latina minúscula a .. z |
a b c d e f g h i j k l m
|
| U+007B | Llave izquierda |
{
|
| U+007C | Línea vertical |
|
|
| U+007D | Llave derecha |
}
|
| U+007E | Tilde |
~
|
|
Los siguientes caracteres se añaden al conjunto de caracteres básico desde C++26:
|
(desde C++26) |
Conjunto de caracteres literal básico
El conjunto de caracteres literales básicos consiste en todos los caracteres del conjunto de caracteres básico, más los siguientes caracteres de control:
| Código de punto | Carácter |
|---|---|
| U+0000 | Nulo |
| U+0007 | Timbre |
| U+0008 | Retroceso |
| U+000D | Retorno de carro (CR) |
Conjunto de caracteres de ejecución
El conjunto de caracteres de ejecución y el conjunto de caracteres anchos de ejecución son superconjuntos del conjunto de caracteres literal básico. Las codificaciones de los conjuntos de caracteres de ejecución y los conjuntos de elementos adicionales (si los hay) son específicos de la configuración regional. Cada elemento del conjunto de caracteres anchos de ejecución debe ser representable como una unidad de código wchar_t distinta.
Unidad de código y codificación de literales
Una code unit es un valor entero de tipo carácter. Los caracteres en un character literal que no sea un literal de carácter multibyte o no codificable, o en un string literal se codifican como una secuencia de una o más code units, según lo determinado por el prefijo de codificación; esto se denomina la respectiva literal encoding .
Una codificación literal o una codificación específica de la localización de uno de los conjuntos de caracteres de ejecución codifica cada elemento del conjunto de caracteres literal básico como una única unidad de código con valor no negativo, distinta de la unidad de código para cualquier otro de estos elementos. Un carácter que no esté en el conjunto de caracteres literal básico puede codificarse con más de una unidad de código; el valor de dicha unidad de código puede ser el mismo que el de una unidad de código para un elemento del conjunto de caracteres literal básico. Las codificaciones de los conjuntos de caracteres de ejecución pueden no estar relacionadas con ninguna codificación literal.
La codificación literal ordinaria es la codificación aplicada a un carácter ordinario o literal de cadena. La codificación literal amplia es la codificación aplicada a un carácter amplio o literal de cadena.
El carácter U+0000 NULL se codifica como el valor 0. Ningún otro elemento del conjunto de caracteres de traducción se codifica con una unidad de código de valor 0. El valor de unidad de código de cada carácter de dígito decimal después del dígito 0 (U+0030) será uno mayor que el valor del anterior. Las codificaciones de literales ordinarias y anchas están definidas por la implementación en otros aspectos.
Para un literal UTF-8, UTF-16 o UTF-32, el valor escalar UCS correspondiente a cada carácter del conjunto de caracteres de traducción se codifica como se especifica en ISO/IEC 10646 para la forma de codificación UCS respectiva.
Notas
Los nombres estándar de algunos conjuntos de caracteres se han cambiado en C++23 mediante P2314R4 .
| Nombre(s) nuevo(s) | Nombre(s) antiguo(s) |
|---|---|
| basic character set | basic source character set |
| basic literal character set |
basic execution character set
basic execution wide-character set |
Mapeo desde los caracteres del archivo fuente (distinto de un archivo fuente UTF-8) (since C++23) hacia el juego de caracteres básico (until C++23) juego de caracteres de traducción (since C++23) durante la fase de traducción 1 está definido por la implementación, por lo que se requiere que una implementación documente cómo se representan los caracteres fuente básicos en los archivos fuente.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| CWG 788 | C++98 |
los valores de los miembros de los conjuntos de caracteres de ejecución
estaban definidos por la implementación, pero no eran específicos de la configuración regional |
son específicos de la configuración regional |
| CWG 1796 | C++98 |
la representación del carácter nulo (ancho) en
el conjunto básico de caracteres (anchos) de ejecución tenía todos los bits en cero |
solo se requiere que el valor sea cero |
Véase también
| Tabla ASCII | |
|
Documentación de C
para
Conjuntos de caracteres y codificaciones
|