【问题标题】:Greek characters in gcc and warninggcc 中的希腊字符和警告
【发布时间】:2014-03-23 14:09:15
【问题描述】:

我有一个简单的问题。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char c=getc(stdin);
    if (c=='φ')
    {
        printf("in");
    }
}

这段代码的行为确实很奇怪。如果你想自己试试。如果你在控制台输入希腊字符φ,if语句是假的。如果你把'φ'改为'f'并重复它就像一个魅力。还收到警告多字符字符常量 [-Wmultichar]|。有什么建议吗?谢谢。

【问题讨论】:

    标签: c gcc encoding


    【解决方案1】:

    很可能您的终端模拟器正在使用UTF8 编码。在该编码中φ(U+03C6 GREEK SMALL LETTER PHI)是两个字节:"\317\206"(八进制字符串)或"\xCF\x86"(十六进制字符串)

    您可以找到很多关于在 C 中读取 UTF8 的解释,例如this blog entry

    【讨论】:

    • 我使用默认设置的 x 术语。有什么建议吗?
    • 关于编写一个读取使用 UTF-8 编码的字符的函数的建议?阅读 UTF-8。第一个字节中有足够的信息来确定序列的长度。
    • 所以我应该明智地更改代码?我收到的警告呢?
    • 您确定要翻译吗?我得到字节 \xCF \x86,或 Unicode U+03C6(希腊小写字母 PHI)。我同意它是一个多字节字符,因此可以有效地保证比较失败,因为getchar() 返回的单个字节与字符常量中的多个字节不匹配。
    • 谢谢。我使用了 Gnome Character Map,我得到的第一个 phi 是数学的,而不是希腊的。已更正!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2013-09-30
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2013-08-17
    相关资源
    最近更新 更多