【问题标题】:C with gcc and Portuguese Characters带有 gcc 和葡萄牙语字符的 C
【发布时间】:2018-09-22 20:03:46
【问题描述】:

我正在尝试从 Windows 控制台打印和读取葡萄牙语字符,例如:ç、é 等等...

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

int main (void){
        wchar_t stringtemp[5];
        setlocale(LC_ALL,"Portuguese");


        wprintf(L"test with portuguese character: ç\n");
        wprintf(L"Insert a strange portuguese character: ");
        wscanf(L"%s",stringtemp);
        wprintf(L"%s\n",stringtemp);

        return 0;
    }

这是输出:

用葡萄牙语字符测试:ç

插入一个奇怪的葡萄牙语字符:ç

有人知道那里出了什么问题吗?

【问题讨论】:

  • 1 我想inserirNovoRegisto 部分不是很相关?请删除它。 2 minimal reproducible example 包含 #include&lt;stdio.h&gt; #include&lt;wchar.h&gt; #include&lt;locale.h&gt;
  • Unfortunately, cannot repro on TIO。可能是特定于 Windows 的。
  • @user202729 ,TIO 我的输出甚至最差......用葡萄牙语字符测试:?插入一个奇怪的葡萄牙语字符:>>
  • (我添加了&gt;&gt;&lt;&lt; 以确保我不会错过任何内容)
  • 哪个操作系统?

标签: c widechar


【解决方案1】:

至少在 Linux 上,如果我将 setlocale(LC_ALL, "Portuguese") 更改为 setlocale(LC_ALL, "pt_BR.UTF-8") 的行,您上面的代码就可以工作。

(奇怪的是,它不适用于"pt_PT.UTF-8")。

【讨论】:

  • 在 ubuntu 上测试过,效果很好。与您建议的更改完全相同的代码...在 ubuntu 上有效,在 Windows 上无效。我想知道是否有适用于 Windows 的解决方法..
【解决方案2】:

使用这个 - setlocale(LC_ALL,"pl_PL.UTF-8");

【讨论】:

  • 你试过pl_PL.UTF-8吗?
  • 如果我改变了获取 ç(例如来自 wscanf)的工作,但 wprintf 不再工作......
最近更新 更多