Unicode 有人能解释一下编码/解码过程中发生的事件顺序吗?

Unicode 有人能解释一下编码/解码过程中发生的事件顺序吗?,unicode,encoding,utf-8,character-encoding,Unicode,Encoding,Utf 8,Character Encoding,我试图巩固我对编码和解码的理解。我不确定事件序列在不同的设置下是如何工作的: 当我在电脑上打字时,电脑(或我使用的任何程序)是否会自动以UTF-8(或使用的任何编码)解码我的字母 当我保存文件时,它是否会使用用于解码文本的编码标准自动保存?假设我将文档或数据集发送给某人,我是否向他们发送了大量的1和0?然后他们的解码器根据他们指定的默认或编码标准对其进行解码 代码点是如何发挥作用的?我的计算机是否也有它使用的默认代码点词典 如果上述情况属实,我如何找出我的计算机/程序使用的解码/编码方式 抱歉,

我试图巩固我对编码和解码的理解。我不确定事件序列在不同的设置下是如何工作的:

  • 当我在电脑上打字时,电脑(或我使用的任何程序)是否会自动以UTF-8(或使用的任何编码)解码我的字母
  • 当我保存文件时,它是否会使用用于解码文本的编码标准自动保存?假设我将文档或数据集发送给某人,我是否向他们发送了大量的1和0?然后他们的解码器根据他们指定的默认或编码标准对其进行解码
  • 代码点是如何发挥作用的?我的计算机是否也有它使用的默认代码点词典
  • 如果上述情况属实,我如何找出我的计算机/程序使用的解码/编码方式

  • 抱歉,如果这不清楚,或者我误解了/使用了不正确的术语。

    有几种方法可以做到这一点,但这里有一种可能性

    首先,是的,在某种程度上,计算机将您键入的每个字母“解码”为某种编码。每次按下键盘上的某个键时,都会关闭一个电路,该电路会向计算机中的其他硬件(例如键盘控制器)发出按下某个键的信号。然后,该硬件用有关键盘事件(上键、下键、重复键)的信息填充缓冲区,并向CPU发送中断

    当CPU接收到中断时,它跳转到内存中硬件定义的位置,并开始执行在那里找到的代码。此代码通常会检查哪个设备发送了中断,然后跳转到其他位置,该位置有代码来处理特定设备发送的中断。然后,此代码将从设备上的缓冲区读取“”以确定发生了哪个密钥事件

    然后,操作系统处理扫描代码并将其发送给等待键盘输入的应用程序。一种方法是用UTF-8编码的字符填充缓冲区,该字符对应于按下的键。然后,当应用程序从操作系统接收到控制返回时,它将读取缓冲区

    要回答第二个问题,我们首先必须记住在文件中输入数据时会发生什么。输入时,应用程序会收到与按键对应的字母(可能是UTF-8编码的,如上所述)。现在,您的应用程序需要跟踪收到的信件,以便以后可以将您输入的数据保存到文件中。它可以做到这一点的一种方法是在程序启动时分配一个缓冲区,然后在接收到每个字符时将其复制到缓冲区中。如果字符是从操作系统UTF-8编码发送的,那么应用程序只需将这些字节复制到另一个缓冲区即可。继续键入时,缓冲区将继续由操作系统提供的字符填充。当需要保存文件时,应用程序可以要求操作系统将缓冲区的内容写入文件或通过网络发送。磁盘或网络接口的设备驱动程序知道如何将此数据发送到相应的硬件设备。例如,要写入磁盘,您可能需要将数据写入缓冲区,写入磁盘控制器上的寄存器以发出将缓冲区中的数据写入磁盘的信号,然后从磁盘控制器上的另一个寄存器重复读取以检查写入是否完成

    第三,Unicode为每个字符定义了一个代码点。每个代码点可以用多种方式编码。例如,代码点U+004D(“拉丁大写字母M”)可以在UTF-8中编码为0x4D,在UTF-16中编码为0x004D,或者在UTF-32中编码为0x0000004D(参见中的表3-4)。如果内存中有数据,则使用某种编码对其进行编码,并且有一些库可以从一种编码转换为另一种编码


    最后,通过检查设备驱动程序,您可以了解计算机如何处理键盘输入。您可以先看看一些Linux驱动程序,因为其中许多是开源的。然而,每个程序都可以根据自己的选择对数据进行编码和解码。您必须检查每个程序的代码,以了解其编码和解码工作原理。

    这是一个复杂的问题,也因为它取决于许多因素

    当我在电脑上打字时,电脑(或我使用的任何程序)是否会自动以UTF-8(或使用的任何编码)解码我的字母

    这是非常复杂的。一些程序获得键盘代码(如游戏),但大多数程序使用操作系统服务来解释键盘代码(考虑各种键盘布局,但也根据移位、控制等修改结果)

    所以,这取决于操作系统和程序,您可以使用哪种编码。对于终端程序,进程的区域设置还包括stdin/stdout(标准输入和标准输出)的编码。对于图形界面,您可能会得到不同的编码(根据系统编码)

    但是UTF-8是一种编码,因此您在UTF-8中错误地使用了“解码”一词

    当我保存文件时,它是否会使用用于解码文本的编码标准自动保存?假设我将文档或数据集发送给某人,我是否向他们发送了大量的1和0?然后他们的解码器根据他们指定的默认或编码标准对其进行解码

    这是一个复杂的部分。许多系统和计算机语言都很古老,所以它们的设计只有一个系统编码。例如C语言。所以实际上没有解码。程序直接使用编码,并硬编码字母
    A
    具有特定值。对于计算机来说,只有数值才重要。只有在打印数据时,才会以复杂的方式(fo