【问题标题】:What's "ANSI_X3.4-1968" encoding?什么是“ANSI_X3.4-1968”编码?
【发布时间】:2018-07-22 10:10:48
【问题描述】:

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

[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

【问题讨论】:

    标签: python python-3.x encoding character-encoding python-unicode


    【解决方案1】:

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

    • 允许单独出现换行符 (LF) 的第一个修订版(即前面或后面都没有回车符 (CR))。

    • 引入通用名称(US-)ASCII的修订版。

    这基本上是我们认为的ASCII,尽管随后有两个小修订。

    【讨论】:

    • ANSI_X3.4-1968 是官方名称吗?还是只在 Python 中?
    • 是的,它是一个官方名称,名称与python无关参见例如iana.org/assignments/character-sets/character-sets.xhtml
    • 也想知道为什么 python 使用这个名字但在文档中没有提到它。它只提到asciius-ascii。这会带来不必要的混乱。
    • @pynexj 我也很好奇,所以我深入研究了实现——请参阅下面的答案:)
    【解决方案2】:

    如果您好奇它在 cpython 中的来源,该值是使用 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

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 2021-07-05
      • 2019-02-23
      • 2012-08-13
      • 2011-07-14
      • 2017-07-28
      • 1970-01-01
      相关资源
      最近更新 更多