什么是 "ANSI_X3.4-1968" 编码?

What's "ANSI_X3.4-1968" encoding?

在我的系统上查看以下输出:

[STEP 101] # python3 -c 'import sys; print(sys.stdout.encoding)'
ANSI_X3.4-1968
[STEP 102] #
[STEP 103] # locale
LANG=C
LANGUAGE=en_US:en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
[STEP 104] #

用谷歌搜索,但发现的信息很少。甚至 Python 的 The Python Library Reference (v3.5.2) 也没有提到它。有没有国际标准定义它?


(从已接受答案的评论中复制了权威参考:Character Sets

这是 USAS X3.4-1968 的另一个名称,ASCII 的修订版,其区别在于:

  • 第一次修订允许换行 (LF) 自行发生(即前面或后面没有回车符 return (CR )).

  • 引入(US-)ASCII.

  • 通用名称的修订版

这基本上就是我们所想的ASCII,尽管随后进行了两次小的修改。

如果你想知道它从哪里来 cpython,这个值是从 locale 模块计算出来的使用 langinfo.

这是一个小型 C 程序,它演示了 _locale 模块如何确定此信息:

#include <langinfo.h>
#include <locale.h>
#include <stdio.h>

int main () {
    setlocale(LC_ALL, "");
    printf("%s\n", nl_langinfo(CODESET));
    return 0;
}

和一些示例输出:

$ LANG= ./a.out 
ANSI_X3.4-1968
$ LANG=en_US.UTF-8 ./a.out 
UTF-8

python 将 ansi 名称规范化为 ascii(或 US-ASCII