c - 在 C 中分配字符 'æ' 、 'ø' 或 'å'

标签 c unicode utf-8 character-encoding char

所以我有一个变量 char c,我想将其分配给 'å'。如果我尝试 c = 'å',我会在终端中收到一条警告:warning: multi-character character constant [-Wmultichar]

  1. 什么是多字符常量?
  2. 如何将 'æ''ø''å' 分配给 char c?

最佳答案

What is a multi-character constant?

这表明您的文本编辑器正在使用多个字节来存储源代码文件中的字符,可能是因为它将它保存为 UTF-8 编码的 Unicode 字符。由于 char 只能容纳一个字节,您的编译器告诉您此赋值不会达到预期效果,因为您正试图将多字节文字存储到只能容纳一个字节的变量中.

How can I assign either 'æ', 'ø', or 'å' to a char c?

这取决于多种因素。 char 可以存储从 0 到 255 的值。1 ASCII 中只定义了 0 到 127; 128 到 255 仅在某些其他代码页(例如,ISO-8859-1)中定义。为了将这些字符之一存储在 char 中,您必须执行以下操作:

  1. 将您的文本编辑器配置为使用代码页进行保存,该代码页对每个字符使用一个字节并且包含您要存储的字符。
  2. 将您的编译器配置为使用此代码页读取源文件。 (例如,对于 gcc,这将是 -finput-charset=...。)
  3. 如果程序输出这些字符(到标准输出或文件!),那么任何读取输出的内容也必须被告知此代码页,以便它知道如何处理 128 到 255 范围内的字节。

如果这三者中的任何一个不匹配,那么您可能会在字符应该出现的地方看到编译器警告或垃圾输出。

您可以通过使用宽字符 (wchar_t) 来避开大部分这些问题,这些字符通常大到足以存储任何 Unicode 代码点。您仍然需要确保您的文本编辑器和编译器就源代码中的字符编码达成一致,除非您使用 \uNNNN Unicode 转义序列,它可以表示任何 Unicode 代码通过仅使用 ASCII 兼容字符指向 C 源代码(这意味着编译器不必知道源代码位于哪个代码页)。


1 或 -128 到 127; C 标准未指定 char 的默认带符号性,但由于我们讨论的是字符,因此我将假设 0 到 255 是预期范围。

关于c - 在 C 中分配字符 'æ' 、 'ø' 或 'å',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25851888/

相关文章:

regex - 字符名称,替换和Umlaut “Ü”:格式错误的UTF-8字符

c - 使用指针从单链表中删除项目

c++ - 如何从 C 调用 C++ 方法?

python - 从 python 中的 unicode 字符串中删除换行符的问题

html - 如何让这个 unicode 字符出现在我的网站上?

php - 使用 PHP 解析 unicode 表情符号文本文件

python - Unicode解码错误: 'utf-8' codec can't decode byte 0x80

java - 生产中的 UTF-8 数据请求问题

c - 用于 arm 的 aarch64-linux-gnu-gcc 交叉编译器失败

c - 从多个管道读取数据的正确方法是什么?