Dev C++ 区域设置仅在使用系统区域设置时工作,而不是在指定名称时工作

问题描述 投票:0回答:1

当使用

setlocale()
将程序的语言环境更改为意大利语时,代码仅在使用
setlocale(LC_ALL, "")
时才按预期工作,而在使用
setlocale(LC_ALL, "it-IT")
时则不然。

我目前正在使用 Dev C++ 及其默认编译器,我的操作系统是 windows 10。

我尝试检查

setlocale(LC_ALL, "it-IT")
的返回值,它返回了
NULL
。 我尝试使用不同的区域设置名称,以防在查找区域设置时出错,我尝试使用
"it_IT"
"it"
,并尝试将
.utf8
放在两个版本的区域设置名称的末尾。

具体用例是一个

printf
,里面有一个
è
。当代码按预期工作时,我会在输出中得到一个
è
,如果没有,我会得到我认为是希腊字符的内容。

最小可重现示例:

#include <stdio.h>
#include <locale.h>

int main(void)
{
    setlocale(LC_ALL, "");
    printf("è");
    return 0;
}

此代码按预期工作并给出“è”作为输出

#include <stdio.h>
#include <locale.h>

int main(void)
{
    setlocale(LC_ALL, "it-IT");
    printf("è");
    return 0;
}

此代码无法按预期工作,并给出“Þ”作为输出(我之前提到的区域设置名称的其他值也会发生同样的情况)。不设置区域设置也会给出相同的结果

c windows locale setlocale
1个回答
0
投票

如前所述,C 源文件的编码(应用于包含的文字)与操作系统支持(并激活)的编码(在 Windows 中,这是“代码页”)之间存在冲突。

我不确定这与“it-IT”语言环境的关系,并且我无法始终重现该问题。但你可以尝试这样的事情:

#include <stdio.h>
#include <locale.h>

int main(void)
{
    setlocale(LC_ALL, "it-IT.utf8");
    printf("è");
    return 0;
}

但是用UTF8编码保存你的源文件。 (如果您使用的是 Visual Studio Code,请在底部工具栏中查找编码标记。请参阅在 Visual Studio Code 中更改文件的编码)。

© www.soinside.com 2019 - 2024. All rights reserved.