是字符,如 - - §“非ascii或ascii?

时间:2015-05-24 18:08:16

标签: python encoding utf-8 ascii non-ascii-characters

我有一个项目,我需要“在任何可能的地方用ASCII等效替换所有非ASCII字符(在html中)”。

我只是想知道:标题中的字符是非ascii还是ascii?

如果它们是非ascii,我如何使用Pyhton将它们转换为ascii?谢谢!

1 个答案:

答案 0 :(得分:4)

其中一些是ASCII,有些则不是。您可以查找HTML 4(或HTML5,XHTML 4等类似网址)的含义here。该表为您提供了每个实体的Unicode代码点; Unicode代码点0-127对应于ASCII字符0-127,Unicode代码点128+对应非ASCII。

对于那些非ASCII的,您必须先决定用替换它们的内容,然后再编写代码来替换它们。

特别是:

  • —,U + 2014,非ASCII,通常由--取代。
  • –,U + 2013,非ASCII,通常由-取代。
  • §§,U + 00A7,非ASCII;没有常见的替代品,所以你必须选择一些东西,也许是"sect. "
  •  是一个不间断的空间,U + 00A0,非ASCII,通常用空格代替。
  • "",U + 0022,已经是ASCII。

替换这些的一种方法是使用str.replace方法。例如:

h = h.replace('—', '--').replace('–', '-')
h = h.replace('§', 'sect. ').replace(' ', ' ')

但是,我认为你最好转换为非转义Unicode,然后使用str.translate(或unicode.translate,如果这是Python 2.x)来映射字符。一旦你有超过4个字符需要处理,翻译表就会比一长串replace调用更简单(并且更有效,如果重要)。这样,您还可以处理未转义的em-dashes或其他您没有注意到的角色。例如:

h = html.unescape(h)
table = {0x2013: '-', 0x2014: '--', 0x00a7: 'sect. ', 0x00A0: ' '}
h = h.translate(table)
h.encode('ascii') # forces an exception if you missed any non-ASCII chars