如何正确处理特殊的葡萄牙语字符:ç,é,è等...在C中使用字符串?
我发现如何使用printf但是scanf,fgets等...我现在不知道如何正确地将字符串存储在字符串中......
#include <locale.h>
int main (void){
setlocale(LC_ALL,"Portuguese");
printf("This is a example! Portuguese caracters ç é");
}
编辑:
按照以下建议尝试此代码:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
int main() {
int a = 0;
setlocale(LC_ALL,"Portuguese");
wprintf(L"Exemplo de ç\n");
return 0;
}
手动从控制台编译:gcc -o main.exe main.c有效。 但是使用devc ++会给我一个错误:
[错误]转换为执行字符集:无效参数
如果我只放:wprintf(L“Exemplo de \ n”); (没有ç)devc ++现在编译得很好。
因此,一旦手动编辑它,我猜是与devc ++编译选项相关的东西......有人知道它吗?
EDIT2:
我的主要目标是向用户询问输入。读取该输入以保存到文件。每次程序启动时,我都会读取文件以恢复保存在文件中的值。
但在葡萄牙语中,用户可以键入诸如ç,é,è...
之类的内容答案 0 :(得分:1)
对本地字符使用宽字符串。以下适用于我:
#include <wchar.h>
#include <locale.h>
int main (void)
{
setlocale(LC_ALL,"pl_PL.UTF-8");
wprintf(L"This is a example! Polish characters ąśćłźó\n");
}
答案 1 :(得分:1)
您可以像其他人一样使用 locale.h。但是如果你想节省一些存储空间或者让你的代码运行得更快,你可以使用字符的 ASCII 含义。一个例子:
#include <stdio.h>
int main()
{
printf("Oo! Special character: %c",141);
return 0;
}
答案 2 :(得分:0)
注意: setlocale(LC_ALL,“葡萄牙语”); 适用于终端输出(例如printf)
如果您对使用特殊字符(例如葡萄牙语)从磁盘读取文件感兴趣, 特别是如果您使用的是WINDOWS和DOS文件(Windows / DOS中的文本文件), 您应该以ANSI编码编写文件...
如何在ANSI编码中保存文本文件? 使用具有菜单选项“ enconding”的“ Notepad ++”(https://notepad-plus-plus.org/) 允许选择和保存ANSI编码的文件。简单!问题已解决:^)
来自巴西和其他使用“ bizarre”字符的国家/地区的亲爱的同伴。
答案 3 :(得分:0)
如果您在linux或OS / X上工作,只需在源文件和终端中都使用UTF-8编码即可无缝运行。
通过简单的源代码:
#include <stdio.h>
int main() {
printf("Olá! vocês todos moram na França?\n");
return 0;
}
我得到以下输出:Olá! vocês todos moram na França?
十六进制和八进制:
0000 4F 6C C3 A1 21 20 76 6F O l \303 \241 ! v o 0008 63 C3 AA 73 20 74 6F 64 c \303 \252 s t o d 0020 6F 73 20 6D 6F 72 61 6D o s m o r a m 0028 20 6E 61 20 46 72 61 6E n a F r a n 0040 C3 A7 61 3F 0A \303 \247 a ? \n
如您所见,á
编码为\xC3\xA1
,ê
编码为\xC3\xAA
,ç
编码为\xC3\xA7
。
答案 4 :(得分:0)
如何在C中使用字符串正确处理特殊的葡萄牙语字符,例如ç,é,è等...
将语言环境设置为使用utf8,并形成带有u8
前缀的字符串文字。
#include <stdio.h>
#include <locale.h>
int main (void) {
if (setlocale(LC_ALL, "en_US.utf8")) {
puts("Unable to set locale");
} else {
puts(u8"This is a example! Portuguese characters ç é");
}
}
输出
This is a example! Portuguese characters ç é
使用wprintf()
的麻烦之处在于所有输出都应为w....()
。一旦代码使用了printf()
或wprintf()
,流现在就会具有 orientation 。
字节输入/输出功能不得应用于宽方向的流,而宽字符输入/输出功能不应适用于面向字节的流。 C17dr§7.21.2 4