2015-05-24 16 views
-1

我有一个项目,我需要用“ASCII代替所有非ASCII字符(在html中)”。是字符,如— – §   "非ascii或ascii?

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

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

+0

它们不是ascii。只需查看一个ASCII表格 - 这些字符都不会在那里列出 – Eric

+0

尝试在Google中搜索ASCII并注意字符代码(数字值)。有你的答案。 –

+2

我不清楚你的标题是否正确代表你的任务。由于html可以包含*字符串*'—',并且所有这七个字符都是ascii,您确定需要替换那些内容吗? –

回答

3

其中有些是ASCII码,有些不是。您可以查看HTML 4的含义here(或HTML5,XHTML 4等的类似URL)。该表为您提供每个实体的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)的字符映射。翻译表格比一长串replace调用变得简单得多(而且效率更高),一旦有超过4个字符需要处理。这样,你也可以处理诸如非扭曲的电子短划线或其他你没有注意到的角色。例如:

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 
+0

我认为你只是完成了OP –

+0

的任务@PadraicCunningham:幸运的是,如果这真的是一项家庭作业,而且他太笨或懒得自己开始解决问题或试图理解答案,我会说有一个他很可能会失败,因为他试图用字节而不是unicode来运行它,或者它不起作用,或者因为他不知道如何从“诸如......这样的字符”扩展到所有赋值包含的字符...... (如果他真的想解决这个问题,他应该没有问题。) – abarnert

+0

另一种可能的解释是“这些字符中的哪一个应该转换为实体”,另一个是实体代码本身是ASCII(当然这些是)。提名关闭不明确,但绝对upvote这个尝试的答案。 – tripleee