ho trovato il livello C (C99 e C11) vago rispetto alle posizioni del codice carattere/stringa e regole di codifica:standard C: Set Caratteri e codifica stringa di specifica
Innanzitutto lo standard definisce the source character set
e the execution character set
. In sostanza fornisce un insieme di glifi, ma non associa alcun valore numerico con essi - Quindi qual è il set di caratteri predefinito?
Non sto chiedendo di codificare qui ma solo il glifo/repertorio per la mappatura numerica/di codice. Definisce universal character names
come ISO/IEC 10646, ma dice che questo è il set di caratteri predefinito?
Come estensione a quanto sopra - Non ho trovato nulla che dica quali caratteri rappresentino le sequenze di escape numeriche \ 0 e \ x.
dagli standard C (C99 e C11, non ho controllato ANSI C) ho ottenuto il seguente circa il carattere e stringhe letterali:
+---------+-----+------------+----------------------------------------------+
| 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 |
+---------+-----+------------+----------------------------------------------+
Comunque io non ho trovato nulla circa la codifica regole per questi letterali. UTF-8 sembra suggerire la codifica UTF-8, ma non penso sia menzionato esplicitamente ovunque. Inoltre, per gli altri tipi la codifica non è definita o dipende dall'implementazione?
Non ho familiarità con le specifiche UNIX. La specifica UNIX specifica eventuali vincoli aggiuntivi a queste regole?
Anche se qualcuno può dirmi cosa schema charset/codifica utilizzato dal GCC e MSVC che sarebbe anche aiutare.
E 'anche definita l'implementazione per u8 "..." letterali? Sembra suggerire la codifica UTF-8 per quel particolare letterale. – tinkerbeast
@tinkerbeast no - C non richiede alcun set di caratteri particolare. U8" ..."indica che la stringa deve essere composta da caratteri che si inseriscono in una memoria a otto bit. –
@ H2CO3 C11 dice che u8 letterali sono utf-8. Non sono sicuro che i compilatori siano riusciti a implementarlo nonostante – nos