C字符串特殊字符(葡萄牙语)

时间:2018-04-09 10:55:25

标签: c string scanf fgets

如何正确处理特殊的葡萄牙语字符:ç,é,è等...在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:

我的主要目标是向用户询问输入。读取该输入以保存到文件。每次程序启动时,我都会读取文件以恢复保存在文件中的值。

但在葡萄牙语中,用户可以键入诸如ç,é,è...

之类的内容

5 个答案:

答案 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