【问题标题】:how to change the ascii character into utf-8 with python?如何使用 python 将 ascii 字符更改为 utf-8?
【发布时间】:2014-07-11 15:16:37
【问题描述】:

A9在ascii表中代表©,如何将ascii编码中的A9改成python中的utf-8编码?asii编码改成utf-8的规则是什么?

【问题讨论】:

  • "©" 不是 ASCII 字符。
  • 你能解释一下你真正想要完成的事情吗,也许这会对我们有所帮助,因为这个问题没有意义。
  • "©"是一个扩展的ASCII字符,它的值是a9,你可以在aboutmyip.com/AboutMyXApp/AsciiChart.jsp得到它。
  • @it_is_a_literature:你有没有考虑过那个表可能是错的?
  • @it_is_a_literature: extended ASCII 没有标准;这是一个没有可靠含义的术语。最后但同样重要的是,您没有使用术语extended ASCII,您只谈到了plain ASCII。在计算机编程中,精度很重要。

标签: python python-3.x encoding utf-8 ascii


【解决方案1】:

任何给定的 ASCII 代码点都等于该代码点的 UTF-8 编码。这是故意的。

但是,© 不是 ASCII 码点,它是 Latin-1 码点。 ASCII 是 7 位标准,代码点从 00 到 7F。除此之外,Latin 1 (ISO-8859-1) 从 U+0080 运行到 U+00FF,每个代码点需要 2 个 UTF-8 字节进行编码。

只需从拉丁语 1 解码,编码为 UTF-8:

>>> b'\xA9'.decode('latin1').encode('utf8')
b'\xc2\xa9'

至于UTF-8的“规则”,最好在UTF-8 Wikipedia article中解释。

对于 Latin-1 代码点,其值适合单个字节,规则很简单:前 2 位(1011)与@987654328 一起构成第一个字节的低两位@ 作为高位。代码点的低 6 位被赋予10 作为高位。

A910101001 然后变为 11000010 10101001C2 A9

       10 101001   Latin-1 codepoint A9
       .. ------
       /     \
11000010 10101001  UTF-8 encoding C2 A9
      ..   ------

【讨论】:

  • 它是 >>> b'\xA9'.decode('latin1').encode('utf8') 不是 >>> '\xA9'.decode('latin1').encode( 'utf8') ,我已经测试过了。
  • @it_is_a_literature:在 Python 3 中,是的,但是如果您没有指定使用 Python 3,我不得不假设更常见的 Python 2。
猜你喜欢
  • 2021-12-31
  • 2020-11-26
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2011-06-19
  • 2012-03-22
  • 2010-10-24
  • 2012-08-26
相关资源
最近更新 更多