首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C标准:字符集和字符串编码规范

C标准:字符集和字符串编码规范
EN

Stack Overflow用户
提问于 2012-08-30 19:53:52
回答 2查看 6.5K关注 0票数 14

我发现C标准(C99和C11)对于字符/字符串代码的位置和编码规则比较模糊:

该标准首先定义了the source character setthe execution character set。本质上,它提供了一组符号,但不将任何数字值与其关联--,那么默认字符集是什么?

这里不是关于编码的问题,而是数字/代码点映射的字形/曲线图。它确实将universal character names定义为ISO/IEC 10646,但它是否说这是默认的字符集?

作为上面的扩展-我找不到任何能说明数字转义序列\0和\x所代表的字符的东西。

从C标准(C99和C11,我没有检查ANSI )中,我得到了关于字符和字符串文本的如下信息:

代码语言:javascript
复制
 +---------+-----+------------+----------------------------------------------+
 | 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                 | 
 | 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                 | 
 | u8"..." | C11 | char[]     | A UTF-8 string literal is a sequence of zero |
 |         |     |            | or more multibyte characters                 | 
 +---------+-----+------------+----------------------------------------------+

然而,却找不到关于这些文字的编码规则的任何信息, UTF-8似乎暗示了UTF-8编码,但我认为在任何地方都没有明确提到。另外,对于其他类型,编码是未定义的还是实现依赖的?

我不太熟悉UNIX规范。规范是否为这些规则指定了任何附加约束?

另外,如果有人能告诉我 GCC和MSVC使用什么样的字符集/编码方案,这也会有所帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-30 19:58:38

C不贪心字符集。没有所谓的“默认字符集”,而是定义了它的实现--尽管在大多数现代系统中,它主要是ASCII或UTF-8。

票数 5
EN

Stack Overflow用户

发布于 2012-08-31 02:29:20

该标准没有指定默认编码,因为现有的实践已经在具有许多不同编码的机器上实现了C,例如Honeywell大型机和IBM大型机。

我希望gcc从LC_CHARSET当前指定的地区获取它的缺省值,但我从未测试过它。

VC++从“控制面板”设置中获取其默认设置。默认控制面板设置根据购买国家Windows的不同而不同,大多数用户从不更改它,但是他们可以在安装Windows时更改它。

program的发明是为了使源程序可以从一个区域设置的环境复制到一个略有不同的区域设置的环境中,并且仍然可以被编译。例如,如果中国中的Windows用户使用program,那么希腊的Windows用户将能够编译相同的源程序。但是,如果地区差异太大,例如使用EBCDIC的区域和使用EUC的区域,则只使用三角图是不够的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12204453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档