翻译特殊字符½
我在看一个包含特殊字符 ½
的源文件。我想把它转换成 1/2
。这个字符是句子的一部分,我还需要正常使用这个字符串。我是在查看网页源代码,所以我不确定我是否总能知道编码是什么?
编辑:我试着看了其他的回答,但对我来说都不管用。它们总是从类似这样的内容开始:
s= u'£10"
但是我在那儿就遇到了一个错误:“没有声明编码”。那么我知道我得到的编码是什么吗,还是说这不重要?我是不是随便选一个就行?
3 个回答
你试过用 codecs
来读取你的文件吗? [文档]
import codecs
fileObj = codecs.open( "someFile", "r", "utf-8" )
u = fileObj.read() # Returns a Unicode string from the UTF-8 bytes in the file
你可以在这里查看完整的指南 这里。
还有一个不错的参考: http://docs.python.org/howto/unicode
这实际上是两个问题。
#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 编码。)
Dietrich 先说了,但我这里再补充一些关于设置源文件编码的细节:
因为你想在代码中使用字面上的 unicode 字符 ½,首先你得能在源文件里写出来。可惜的是,Python 解释器对 任何 unicode 输入都很敏感,除非你在文件的前几行加上一个注释来指定文件的编码,像这样:
# coding=utf8
# ... do stuff here ...
这假设你的编辑器是以 UTF-8 格式保存文件的。如果你用的是其他编码格式,就需要指定那个编码。想了解更多,可以查看 PEP-0263。
一旦你指定了编码,你就可以在代码中写类似这样的内容:
text = text.replace('½', '1/2')
网页的编码
根据你下载网页的方式,你可能根本不需要担心这个,大多数 HTTP 库会自动为你选择合适的编码。