【问题标题】:Where can I find a table of all the characters for every C99 Character Set?在哪里可以找到每个 C99 字符集的所有字符表?
【发布时间】:2010-10-11 00:14:10
【问题描述】:

我正在为以下每个 C 字符集中的每个字符寻找一个表(或生成一个表的方法):

  • 基本字符集
  • 基本执行字符集
  • 基本源字符集
  • 执行字符集
  • 扩展字符集
  • 源字符集

C99 在第 5.2.1 节中提到了所有这六个。但是,我发现它阅读起来非常神秘且缺乏细节。

它明确定义的唯一字符集是基本执行字符集基本源字符集

52 个大小写字母 拉丁字母:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

a b c d e f g h i j k l m n o p q r s t u v w x y z

十进制数字:

0 1 2 3 4 5 6 7 8 9

29 个图形字符:

! " # % & ' ( ) * + , – . / : ; ? [ \ ] ^ _ { | } ~

4 个空格字符:

空格、水平制表符、垂直制表符、换页

我相信这些与 基本字符集 相同,但我猜测 C99 并未明确说明这一点。剩下的字符集对我来说有点神秘。

感谢您提供的任何帮助! :)

【问题讨论】:

    标签: c character-encoding c99


    【解决方案1】:

    除了您提到的基本字符集外,其余所有字符集都是实现定义的。这意味着它们可以是任何东西,但实现(即 C 编译器/库/工具链实现)必须记录这些决定。这里的关键段落是:

    §3.4.1 实现定义的行为
    未指定的行为,其中每个实现都记录了如何做出选择

    §3.4.2 特定于语言环境的行为
    行为取决于每个实施记录的当地国籍、文化和语言惯例

    §5.2.1.1 字符集
    应定义两组字符及其相关的整理序列:编写源文件的集合(源字符集),以及在执行环境中解释的集合(执行字符)设置)。每个集合进一步分为 基本字符集,其内容由本子条款给出,以及一组零个或多个 特定于语言环境的成员(它们不是基本字符集)称为扩展字符。组合集也称为扩展字符集。执行字符集成员的值是实现定义的

    因此,请查看 C 编译器的文档以了解其他字符集是什么。例如,在我的 gcc 手册页中,一些命令行选项状态为:

    -fexec-charset=字符集 设置执行字符集,用于字符串和字符 常数。默认值为 UTF-8。 charset 可以是任何编码 系统的“iconv”库例程支持。 -fwide-exec-charset=字符集 设置宽执行字符集,用于宽字符串和 字符常量。默认为 UTF-32 或 UTF-16,无论哪个 对应于“wchar_t”的宽度。与 -fexec-charset 一样, charset 可以是系统的“iconv”支持的任何编码 图书馆例程;但是,您将遇到编码问题 不完全适合“wchar_t”。 -finput-charset=字符集 设置输入字符集,用于从 输入文件的字符集到使用的源字符集 海湾合作委员会。如果 locale 没有指定,或者 GCC 不能得到这个 来自语言环境的信息,默认为 UTF-8。这可以是 被语言环境或此命令行选项覆盖。 目前命令行选项优先,如果有 冲突。 charset 可以是系统支持的任何编码 “iconv”库例程。

    要获取iconv 支持的编码列表,请运行iconv -l。我的系统有 143 种不同的编码可供选择。

    【讨论】:

      【解决方案2】:

      据我所知,该标准并未将基本字符集视为与源字符集和执行字符集不同的东西。该标准列出了它涉及的两个字符集 - 源字符集和执行字符集。它们中的每一个都有一个“基本”和“扩展”组件(其中任何一个的扩展组件都可以是空集)。

      您有一个“源字符集”,它由一个“基本源字符集”和零个或多个“扩展字符”组成。基本源字符集和那些扩展字符的组合称为扩展源字符集。

      对于执行字符集也是如此(有一个基本执行字符集,它与零个或多个扩展字符组合构成扩展执行字符集)。

      标准(和您的问题)列举必须在基本字符集中的字符 - 在基本字符集中可以有其他字符。

      就每个字符集的基本“范围”和扩展“范围”之间的差异而言,基本字符集成员的值必须适合一个字节 - 该限制不适用于扩展人物。另请注意,这并不一定意味着源文件编码必须是单字节编码。

      源字符集中的字符值不需要与执行字符集中的值一致(例如,源字符集可能由 ASCII 组成,而执行字符集可能是 EBCDIC)。

      【讨论】:

        【解决方案3】:

        您可以查看GNU iconv。其中,它将打印或转换 Java 和 C99 字符串。 iconvlibiconv 的命令行界面,很可能是您的 C99 编译器在内部用于这些字符转换的内容。

        键入iconv -l 以查看您的系统上可用的字符串。您需要从源代码重新编译以更改该设置。

        在 OS X 上,我有 141 个字符集。在 Ubuntu 上,我有 1,168 个字符集(其中大部分是别名)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          • 2021-06-19
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          相关资源
          最近更新 更多