簡體   English   中英

C標准:字符集和字符串編碼規范

[英]C standard : Character set and string encoding specification

我發現關於字符/字符串代碼位置和編碼規則的C標准(C99和C11)含糊不清:

首先,該標准定義the source character setthe execution character set 本質上,它提供了一組字形,但是不將任何數字值與它們相關聯- 那么默認字符集是什么?

我不是在這里編碼,而只是字形/庫到數字/代碼點的映射。 它確實將universal character names定義為ISO / IEC 10646,但這是否表示這是默認字符集?

作為上述內容的擴展-我什么都找不到,數字轉義序列\\ 0和\\ x表示什么字符。

從C標准(C99和C11,我沒有檢查ANSI C),我得到了有關字符和字符串文字的以下信息:

 +---------+-----+------------+----------------------------------------------+
 | 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                 | 
 +---------+-----+------------+----------------------------------------------+

但是我找不到關於這些文字的編碼規則的任何信息。 UTF-8似乎暗示了UTF-8編碼,但是我認為沒有在任何地方明確提及它。 另外,對於其他類型,編碼是未定義的還是實現相關的?

我不熟悉UNIX規范。 UNIX規范是否為這些規則指定了任何其他約束?

另外,如果有人可以告訴我,GCC和MSVC使用哪種字符集/編碼方案也有幫助。

C對字符集並不貪婪。 沒有定義為“默認字符集”的東西,它是由實現定義的-盡管在大多數現代系統中,它大多是ASCII或UTF-8。

該標准未指定默認編碼,因為現有實踐已經在具有許多不同編碼的機器(例如Honeywell大型機和IBM大型機)上實現了C語言。

我希望gcc從LC_CHARSET當前指定的語言環境中獲取其默認值,但我從未測試過。

VC ++從“控制面板”設置中獲取其默認設置。 默認的“控制面板”設置根據購買Windows的國家/地區而異,大多數用戶從不更改它,但是他們可以在安裝Windows時進行更改,以后再進行更改。

發明了Trigraph,以便可以將源程序從具有一種語言環境的環境復制到具有稍微不同的語言環境的環境中,並且仍然可以對其進行編譯。 例如,如果中國的Windows用戶使用三維字母,那么希臘的Windows用戶將能夠編譯相同的源程序。 但是,如果語言環境差異太大,例如使用EBCDIC的語言環境和使用EUC的語言環境,三字母組合就不能滿足要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM