翻译特殊字符½

时间:2012-01-22 04:00:55

标签: python unicode

我正在阅读包含特殊字符½的来源。如何将其转换为1/2?该字符是句子的一部分,我仍然需要能够“正常”使用该字符串。我正在阅读网页资源,所以我不确定我是否总能知道编码?

编辑:我尝试过查看其他答案,但它们对我不起作用。他们似乎总是从以下内容开始:

s= u'£10"

但我已经收到错误:“没有声明编码”。但我知道我正在进行什么编码,或者这不重要吗?我只选一个吗?

3 个答案:

答案 0 :(得分:5)

这实际上是两个问题。

<强>#1。解释½:使用unicodedata模块。你可以要求提供角色的数值,或者你可以使用规范的规范化形式进行规范化并自己解析。

>>> import unicodedata
>>> unicodedata.numeric(u'½')
0.5
>>> unicodedata.normalize('NFKC', u'½')
'1⁄2'

<强>#2。编码问题:如果您正在使用终端,请确保Python知道终端编码。如果您正在编写源文件,请确保Python知道文件编码。您不能只“选择”为Python设置的编码,您必须告知Python有关终端/文本编辑器已经使用的编码。

Python允许您使用Vim / Emacs样式注释设置文件的编码。如果您使用Vim,请在文件顶部添加注释:

# coding=UTF-8

或者,如果您使用Emacs:

# -*- coding: UTF-8 -*-

如果你既不使用Vim也不使用Emacs,那么哪一个并不重要。显然,如果你不使用UTF-8,你应该替换你实际使用的编码。 (UTF-8是我唯一可以推荐的编码。)

答案 1 :(得分:2)

Dietrich打败了我,但这里有一些关于设置源文件编码的更多细节:

因为您要搜索文字unicode½,所以您需要能够在源文件中编写它。不幸的是,Python解释器在任何 unicode输入上窒息,除非您在前几行中使用注释指定该源文件的编码,如下所示:

 # coding=utf8
 # ... do stuff here ...

这假定您的编辑器将文件保存为UTF-8。如果它使用不同的编码,请指定。有关详细信息,请参阅PEP-0263

一旦你指定了编码,你应该能够在你的代码中写下这个:

text = text.replace('½', '1/2')

网页编码

根据您下载页面的方式,您可能根本不需要担心这一点,大多数HTTP库都会自动为您选择编码。

答案 2 :(得分:1)

您是否尝试使用codecs来阅读文件? [docs]

import codecs
fileObj = codecs.open( "someFile", "r", "utf-8" )
u = fileObj.read() # Returns a Unicode string from the UTF-8 bytes in the file

您可以查看整个指南here

也是一个很好的参考:http://docs.python.org/howto/unicode