【发布时间】:2018-09-08 11:51:55
【问题描述】:
我正在尝试 C 控制台应用程序可以读取(使用键盘)scanf 或 gets 中的特殊西班牙字符,例如重音符号、“ñ”等,然后也使用 printf 打印它.
感谢包locale.h,我已经实现了正确显示这些字符(存储在变量中或直接来自printf)。我举个例子:
#include <stdio.h>
// Add languaje package
#include <locale.h>
int main(void)
{
char string[254];
// Set languaje to Spanish
setlocale(LC_ALL, "spanish");
// Show correctly spanish special chars
printf("¡Success!. It is shown special chars like 'ñ' or 'á'.\n\n\n");
// Gets special chars by keyboard
printf("Input spanish special chars (such 'ñ'): ");
gets(string);
printf("Your string is: %s", string);
return 0;
}
但我还没有实现用上面提到的功能正确拾取它们。
有人知道怎么做吗?
谢谢。
编辑 1:
在测试中,我观察到:
-
setlocale(LC_ALL, "spanish");正确显示西班牙语字符,但不从键盘收集。 -
setlocale(LC_ALL, "es_ES");它可以正确地从键盘中提取西班牙语字符,但不能很好地显示它们。
编辑 2:
我也尝试过setlocale(LC_ALL, "");、setlocale(LC_ALL, "es_ES.UTF-8"); 和setlocale(LC_ALL, "es_ES.ISO_8859-15");,结果与 EDIT 1 相同(或者从键盘很好地捕捉字符或在控制台中很好地显示它们,但永远不会同时在同时)。
【问题讨论】:
-
在什么操作系统上?你读过utf8everywhere.org 吗?你可能想要(至少在 Linux 上)
setlocale(LC_ALL, "es_ES.UTF-8");什么终端模拟器?什么字体? -
@BasileStarynkevitch 我相信你是对的,你应该把这个作为答案。
-
顺便说一句,
gets已过时且危险。使用fgets、getline、readline -
@BasileStarynkevitch 是的。我也尝试过
setlocale(LC_ALL, "es_ES.UTF-8");和setlocale(LC_ALL, "es_ES.ISO_8859-15");,但它们也没有工作。我在 Windows 上使用 CodeBlocks、GCC 调试器运行 C 程序 -
您忘记在问题中提及 Windows(至少作为标签)和 CodeBlocks。 BTW GCC 是一个编译器(调试器可能是
gdb)
标签: c windows locale codeblocks stdio