encontré el estándar C (C99 y C11) vaga con respecto a las posiciones de código de caracteres/cuerda y reglas de codificación:C estándar: conjunto de caracteres y codificación cadena especificación
primer lugar el estándar define the source character set
y the execution character set
. Esencialmente proporciona un conjunto de glifos, pero no asocia ningún valor numérico con ellos - Entonces, ¿cuál es el juego de caracteres predeterminado?
No estoy preguntando acerca de la codificación aquí, sino solo del glifo/repertorio al mapeo de puntos numéricos/de código. Define universal character names
como ISO/IEC 10646, pero ¿dice que este es el juego de caracteres predeterminado?
Como una extensión de lo anterior, no pude encontrar nada que diga qué caracteres representan las secuencias de escape numérico \ 0 y \ x.
A partir de los estándares de C (C99 y C11, no el registro ANSI C) Tengo el siguiente sobre el carácter y literales de cadena:
+---------+-----+------------+----------------------------------------------+
| Literal | Std | Type | Meaning |
+---------+-----+------------+----------------------------------------------+
| '...' | C99 | int | An integer character constant is a sequence |
| | | | of one or more multibyte characters |
| L'...' | C99 | wchar_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| u'...' | C11 | char16_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| U'...' | C11 | char32_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| "..." | C99 | char[] | A character string literal is a sequence of |
| | | | zero or more multibyte characters |
| L"..." | C99 | wchar_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
| u8"..." | C11 | char[] | A UTF-8 string literal is a sequence of zero |
| | | | or more multibyte characters |
| u"..." | C11 | char16_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
| U"..." | C11 | char32_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
+---------+-----+------------+----------------------------------------------+
Sin embargo no pude encontrar nada acerca de la codificación reglas para estos literales. UTF-8 parece indicar la codificación UTF-8, pero no creo que se mencione explícitamente en ninguna parte. Además, para los otros tipos ¿la codificación es indefinida o depende de la implementación?
No estoy familiarizado con la especificación UNIX. ¿Especifica la especificación de UNIX alguna restricción adicional a estas reglas?
También si alguien me puede decir qué esquema de codificación/chasfer es utilizado por GCC y MSVC que también ayudaría.
¿La implementación también está definida para u8 "..." literales? Parece indicar la codificación UTF-8 para ese literal en particular. – tinkerbeast
@tinkerbeast no - C no requiere ningún conjunto de caracteres en particular. u8 "..."indica que la cadena debe estar compuesta de caracteres que caben en un almacenamiento de ocho bits. –
@ H2CO3 C11 dice que los literales U8 son utf-8. No estoy seguro de que los compiladores hayan llegado a implementar eso aunque – nos