Encoding 理解编码方案

Encoding 理解编码方案,encoding,Encoding,我无法理解编码的一些关键要素: ASCII仅仅是一个字符,还是它也有自己的编码方案算法 其他windows代码页(如Latin1)是否有自己的编码算法 UTF7、8、16、32是唯一的编码算法吗 UTF alghoritms是否仅用于UNICODE集合 给定ASCII文本:Hello World,如果我想将其转换为Latin1或BIG5,在这个过程中使用了哪些编码算法?更具体地说,Latin1/Big5使用他们自己的编码alghoritm还是我必须使用UTF alghoritm?一般来说,像AS

我无法理解编码的一些关键要素:

  • ASCII仅仅是一个字符,还是它也有自己的编码方案算法
  • 其他windows代码页(如Latin1)是否有自己的编码算法
  • UTF7、8、16、32是唯一的编码算法吗
  • UTF alghoritms是否仅用于UNICODE集合

  • 给定ASCII文本:Hello World,如果我想将其转换为Latin1或BIG5,在这个过程中使用了哪些编码算法?更具体地说,Latin1/Big5使用他们自己的编码alghoritm还是我必须使用UTF alghoritm?

    一般来说,像ASCII或Latin-1这样的大多数编码方案只是将字符映射到特定字节序列的大表。可能有,也可能没有一些特定的算法,创造者是如何产生这些特定角色的⟷字节关联,但通常没有比这更多的内容

    Unicode的创新之一就是首先间接地为每个字符分配一个唯一的数字,然后再考虑如何将该数字编码为字节。有许多编码方案可以实现这一点,从and编码到最常用的UTF-8/UTF-16编码。一些像UCS-2现在已经基本上不存在了。在空间权衡、易处理性和可移植性(例如UTF-7用于通过电子邮件等7位系统进行安全传输)方面,每种方法都有其优缺点,它们都可以对当前的一整套Unicode字符进行编码

    要从一种编码转换为另一种编码,您几乎需要将字节从一个表映射到另一个表。也就是说,如果您查看和,字符
    0xC1
    0x41
    似乎分别代表相同的字符“A”,因此在两种编码之间转换时,您可以将这些字节映射为等效的字节。是的,这意味着每个可能的编码对之间需要有一个这样的映射


    由于这显然相当费劲,现代转换器几乎总是通过Unicode作为中间商。这样,每个编码只需要映射到Unicode表,转换可以通过编码→ Unicode码点→ 编码B。最后,您只需要识别哪些字符看起来相同/意思相同,并相应地更改字节表示。

    字符编码是从字符序列到字节序列的映射(过去也有对位序列的编码-它们正在过时)。通常这种映射是一对一的,但不一定是一对一的。这意味着可能存在与此编码中的字符序列不对应的字节序列

    映射域定义哪些字符可以编码

    现在回答你的问题:

  • ASCII是两者,它定义128个字符(其中一些是控制代码)以及它们如何映射到字节值0到127
  • 每个编码都可以定义自己的字符集以及它们如何映射到字节
  • 不,还有其他的ASCII、ISO-8859-1
  • Unicode使用两步映射:首先将字符映射到(相对)称为“代码点”的小整数,然后将这些整数映射到字节序列。第一部分对于所有UTF编码是相同的,第二步不同。Unicode希望包含所有字符。这意味着,大多数字符都在“UNICODE集合”中

  • 1:Ascii只是一种编码——一种非常简单的编码。它实际上只是映射到字符和控制代码的有符号字节(0…127)的正端

    请参阅查看完整的字符集并检查字符

    有一些编码算法可以将ascii字符串与其他编码中的字符串进行转换,但是没有像utf8或utf16那样的压缩/解压算法来写入或读取ascii字符串,如果这是您的意思的话

    2:LATIN-1也不是一种压缩编码(通常称为“可变宽度”),因此不需要算法来进出它

    有关拉丁语-1的概念和集合中每个字符的详细描述,请参见。与许多编码一样,它的前128个插槽只是ascii码。与ascii一样,它的大小为1字节,但它是一个无符号字节,因此在最后一个ascii字符(DEL/127)之后,LATIN1再添加128个字符

    与从一个字符串编码到另一个字符串编码的任何转换一样,有一种专门为该转换定制的算法

    3:再说一遍,unicode编码就是这样的编码。但除了utf32之外,它们都是压缩的。因此,除非您使用utf32,否则写入和读取它们总是需要一个压缩/解压缩步骤

    注意:当使用utf32字符串时,必须考虑一个非线性异常。。。组合字符。从技术上讲,这是另一种压缩类型,因为它们不为未组合字符和组合字符的每个可能组合提供码点,从而节省了空间。它们“预组合”了一些,但如果它们全部预组合,插槽将很快用完

    4:是的。压缩unicode编码的压缩/解压缩算法仅适用于这些编码。它们不适用于任何其他编码

    把它想象成压缩/解压。解压除已压缩的文件或文件夹之外的任何内容当然都不起作用。这适用于最初未压缩的内容,以及已压缩但使用另一种压缩算法(例如:rar)的内容

    我最近为一个正在开发的新跨平台库编写了utf8和utf16压缩/解压缩代码,如果您将一个Big5编码字符串输入到我专门为解压缩utf8编写的方法中,我可以非常自信地告诉您。。。它不仅不起作用,而且很可能会崩溃

    回复:哟