我正在阅读包含特殊字符½
的来源。如何将其转换为1/2
?该字符是句子的一部分,我仍然需要能够“正常”使用该字符串。我正在阅读网页资源,所以我不确定我是否总能知道编码?
编辑:我尝试过查看其他答案,但它们对我不起作用。他们似乎总是从以下内容开始:
s= u'£10"
但我已经收到错误:“没有声明编码”。但我知道我正在进行什么编码,或者这不重要吗?我只选一个吗?
答案 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