代码之家  ›  专栏  ›  技术社区  ›  Konrad

字符编码混乱!

  •  3
  • Konrad  · 技术社区  · 15 年前

    对于utf-8、utf-16、ascii和ansi之间的区别,我有一些疑问。在做了一些研究之后,我有了一些想法,但是如果有人能够准确地解释它们之间的区别(包括每个字符中典型字符的字节表示),这将非常有用。

    我不明白我的问题归结为

    1) How do each of the above store characters as bytes
    2) What are the differences between the above standards
    3) What is a code page
    4) Method of converting characters between the various types.
    

    非常感谢:)

    6 回复  |  直到 14 年前
        1
  •  12
  •   Brian Agnew    15 年前

    我找到了 Joel's article 在Unicode上解释得很好。具体来说,它涵盖了历史(对于这个主题来说是必不可少的)、编码(UTF-8/16等)和代码页。

        2
  •  4
  •   CiscoIPPhone    15 年前

    快速回答你的具体问题。

    1:特定的位组合表示特定的字符。单个字符可以存储在多个字节中。

    2:你提到的编码的简要信息和不同之处。

    ASCII
    包括128个字符的定义。

    美国国家标准协会
    字符数比ASCII多,但仍适合八位字节。需要代码页。

    UTF-8
    这可以用来表示任何Unicode字符。Unicode字符比ASCII字符多。它将每个字符存储在一到四个八位字节的数据中。

    UTF 16
    类似于UTF-8,但基本单位是16位。如果你只是用英语,那么你在每个角色上都浪费了8个比特。

    3:代码页是指计算机指定哪个字符(位的组合)。Unicode不需要代码页,因为每个字符都有自己独特的位组合。ANSI有代码页,因为它只有256个可用字符。例如,如果您在一台阿拉伯语计算机上,您可以将阿拉伯语设置为代码页,并且可以显示阿拉伯字符。

    4:转换的方法取决于要转换的字符集和要转换的字符集以及使用的代码页(如果有)。某些转换可能不可能。UTF-8与ASCII向后兼容,这意味着如果您的文本只包含前128个US字符,那么它与ASCII编码中的相同文本完全相同。

    这个答案是特设的,可能会有错误,欢迎更正。

        4
  •  0
  •   araqnid    15 年前

    O'Reilly cjkv信息处理包含了很多关于字符集和字符编码的背景:当然,特别关注cjkv数据。我发现让我的理解超越“我如何得到一个!*!**@euro符号是否正确显示?.

        5
  •  0
  •   pts    15 年前

    在Unix上,使用名为 recode iconv 要将文本文件转换为其他编码,或使用 伊科夫 功能( man 3 iconv 在你的C或C++程序中。

    如果使用Perl,请使用 Encode 转换模块(例如 use Encode; print encode("utf-8", "\xabfoo") )如果使用python,请使用 unicode.encode 和/或 str.decode (例如) print u'\xabfoo'.encode('utf-8') )

        6
  •  0
  •   John B    14 年前

    有几个随机点可以知道:

    • 关于UTF-8和 ASCII是127 ASCII 字符被精确地编码在 以同样的方式使用UTF-8(这也可能是 其他UTF方案的情况,我是 不确定)换句话说,在 ASCII范围或字符,都是ASCII 而UTF-8完全是 可互换。

      这件事的发生方式是 utf-8是可变长度;第一个 127个字符由 每个字节。除此之外,它 开始使用多个字节。如何 解码器知道是否解释 字节作为单个ASCII字符或 作为多字节序列的一部分? 因为开始时的位 字节遵循某些模式:a 开始的零位意味着它是一个 单字节字符,以及 n 1位 表示该字节是 安 n 字节序列。

    • 另外,不同的语言 将其本机字符串转换为 输出时的不同编码 例如,将它们打印到 文件或屏幕上。因此,如果 你对 语言间的互换性 平台,你应该 指定您希望的方式 要输出的语言字符串类型。否则会出现奇怪和意外的错误!

    • UTF-8也是XML的标准。