tôi thấy các tiêu chuẩn C (C99 và C11) mơ hồ đối với vị trí mã ký tự/chuỗi và các quy tắc mã hóa với:tiêu chuẩn C: Character thiết và mã hóa chuỗi đặc điểm kỹ thuật
Thứ nhất tiêu chuẩn định nghĩa the source character set
và the execution character set
. Về cơ bản, nó cung cấp một bộ glyph, nhưng không liên kết bất kỳ giá trị số với chúng - Vì vậy, bộ ký tự mặc định là gì?
Tôi không hỏi về mã hóa ở đây mà chỉ là hình tượng/tiết mục để ánh xạ điểm số/mã. Nó xác định universal character names
là ISO/IEC 10646, nhưng nó có nói rằng đây là bộ ký tự mặc định không?
Là tiện ích mở rộng ở trên - Tôi không thể tìm thấy bất kỳ thông tin nào cho biết ký tự nào là số trình tự thoát số \ 0 và \ x đại diện.
Từ các tiêu chuẩn C (C99 và C11, tôi đã không kiểm tra ANSI C) Tôi đã nhận các sau đây về nhân vật và chuỗi literals:
+---------+-----+------------+----------------------------------------------+
| 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 |
+---------+-----+------------+----------------------------------------------+
Tuy nhiên tôi không thể tìm thấy bất cứ điều gì về mã hóa quy tắc cho những chữ này. UTF-8 dường như gợi ý mã hóa UTF-8, nhưng tôi không nghĩ rằng nó được đề cập rõ ràng ở bất kỳ đâu. Ngoài ra, đối với các loại khác là mã hóa không xác định hoặc thực hiện phụ thuộc?
Tôi không quen với đặc tả UNIX. Đặc tả UNIX có chỉ định bất kỳ ràng buộc bổ sung nào đối với các quy tắc này không?
Ngoài ra, nếu có ai có thể cho tôi biết lược đồ mã hóa/mã hóa nào được GCC và MSVC sử dụng cũng sẽ hữu ích.
Nó cũng được thực hiện được xác định cho chữ "u8" ...? Nó dường như gợi ý về mã hóa UTF-8 cho chữ đó. – tinkerbeast
@tinkerbeast no - C không yêu cầu bất kỳ bộ ký tự cụ thể nào. u8 "..."chỉ ra rằng chuỗi nên được tạo thành từ các ký tự phù hợp với bộ nhớ tám bit. –
@ H2CO3 C11 không nói chữ u8 là utf-8. Tôi không chắc chắn các trình biên dịch đã có được xung quanh để thực hiện điều đó chưa, mặc dù – nos