【问题标题】:How are binary values assigned to new symbols?如何将二进制值分配给新符号?
【发布时间】:2019-09-23 19:31:31
【问题描述】:

目前在计算机科学中,当我们输入数据(如字母、数字、符号等)时,它会被转换为二进制并存储在机器上。因此,所有最多 255 的 8 位二进制数都被分配了一些预定义的值。

我的问题是:如果生成了一些新符号并且我想将它存储或在机器上表示它会发生什么?这个二进制数是怎么分配的?

【问题讨论】:

标签: unicode encoding character-encoding binary ascii


【解决方案1】:

如果生成了一些新符号会发生什么

这取决于生成符号的人(ITYM 字符)。作为最终用户,您只能从private use areasee an example 分配/选择一个数字(代码点)。

如果需要互操作,需要submit the characters to the Unicode consortium

【讨论】:

    【解决方案2】:

    Unicode

    unicode 中的字符分配总是会发生这种情况。例如,Unicode v12.0 于 2019 年 4 月添加了字符,包括打哈欠的脸、?(代码点 1F971)、导盲犬(代码点 1F9AE)、? 和溜溜球?(代码第 1FA80 点)。根据您的浏览器和操作系统版本,您可能会将这些视为表情符号,也可能不会。

    互联网上最常用的编码方案是UTF-8,这是几种Unicode编码之一。

    ASCII

    ASCII,作为一种编码,是 7 位的,涵盖值 0-127。如果您尝试将超出该范围的字符解码为 ASCII,则错误将取决于实现。例如,“A”同时使用 ASCII(7 位)和 LATIN1(8 位),而“¡”仅使用 LATIN1。在python中,这会产生错误:

    # script.py
    import binascii
    
    def encode_binary(input, encoding):
        return bin(int.from_bytes(input.encode(encoding), 'big'))
    
    print(encode_binary('A', 'utf8'))
    print(encode_binary('A', 'latin1')) 
    print(encode_binary('A', 'ascii')) 
    print() # print a newline
    print(encode_binary('¡', 'utf8'))
    print(encode_binary('¡', 'latin1')) 
    print(encode_binary('¡', 'ascii'))
    --------
    
    $ python script.py
    0b1000001
    0b1000001
    0b1000001
    
    0b1100001010100001
    0b10100001
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    UnicodeEncodeError: 'ascii' codec can't encode character '\u00a1' in position 0: ordinal not in range(128)
    

    【讨论】:

      【解决方案3】:

      您的问题是关于编码和解码(语义/符号到/来自代码/数字)。

      这个问题太笼统了。这取决于编码方法。有些是完整的,因此没有地方可以扩展新符号(例如 ASCII)。一些预见的方法在一定程度上增强和完善(例如 Unicode)。

      有时“增强”是在另一个层次上完成的:通常有 ASCII 然后转义序列或代码(html:&amp;#x24B8;&amp;copy; 注意:两个不同的符号,也相同/相似 symbol 可能有不同的编码;或者通过切换代码点平面/字体也可以有 ASCII 转义序列)。有时就像化妆语言一样,例如\copyright.

      所以有很多方法。只是我希望人们一开始就考虑增强,并以可以扩展的方式实施标准/约定/协议。

      【讨论】:

        猜你喜欢
        • 2020-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-29
        • 2017-03-16
        • 2012-09-02
        • 2017-12-12
        • 1970-01-01
        相关资源
        最近更新 更多