如何在linux下确定scanf的编码?

时间:2014-01-06 18:30:18

标签: c linux encoding

源:

#include <stdio.h>
int main()
{
    char buff[100] = {0};
    char ch;
    int index = 0;
    scanf("%s", buff);
    ch = buff[index];
    while (ch) {
        printf("%2x", ch);
        ch = buff[index++];
    }
    return 0;
}
  1. 将语言环境设置为zh_CN.utf8,输入'我',输出'\ xe6 \ x88 \ x91'(我的utf8编码)
  2. 将语言环境设置为zh_CN.gb108030,输入“我”,输出没有改变。
  3. 问题是为什么编码没有改变?我认为它应该是'\ xce \ xd2'(我的gb18030编码)。

    或者gnome-terminal(基本shell)将每个输入转换为utf8编码,无论使用什么语言环境?

    感谢。

1 个答案:

答案 0 :(得分:0)

通常,您的输入系统(在您的情况下,gnome-terminal)会以特定字符编码(区域设置的第二部分)生成输入字符。这通常由其他一些方法(命令行选项,菜单选项,硬编码到程序中等)设置,而不是由环境变量设置。因此,要使用的语言环境变量中的字符编码通常有一个合理的值:输入系统生成字符的那个。您可以或多或少地自由更改语言(语言环境的第一部分),但不能更改字符编码。