在Python中读取“原始”Unicode字符串
我刚接触Python,所以我的问题可能有点傻,但我看了很多帖子还是没找到答案。
我有一个混合格式的文档,里面包含了html、xml、latex和其他文本格式,我想把它转换成只有latex的格式。
为此,我用Python识别不同的命令,使用正则表达式把它们替换成合适的latex命令。到目前为止,一切都很顺利。
现在我遇到了一些“原始类型”的Unicode符号,比如希腊字母。不幸的是,这些符号太多了,手动处理实在太麻烦了。所以,我想找个聪明的方法来解决这个问题。Python有没有办法识别或读取这些符号呢?我该怎么告诉Python去识别,比如希腊字母中的Pi?
我使用的代码的一个简单示例是:
fh = open('SOURCE_DOCUMENT','r')
stuff = fh.read()
fh.close()
new_stuff = re.sub('READ','REPLACE',stuff)
fh = open('LATEX_DOCUMENT','w')
fh.write(new_stuff)
fh.close()
我不确定这是否重要,但我在Windows上使用的是Python 2.6。
如果有人能给我一些提示,告诉我在哪里可以找到相关信息,或者这可能怎么实现,我会非常感激。或者我是不是完全错了,Python根本无法完成这个任务……
非常感谢!
祝好,
Britta
3 个回答
你需要确定输入文档的“编码”。Unicode可以表示数百万个字符,但文件只能存储8位的值(0到255)。所以,Unicode文本必须以某种方式进行编码。
如果文档是XML格式,编码信息应该在第一行(比如写成encoding="...";如果没有“encoding”字段,默认就是“utf-8”)。对于HTML文件,可以查找“charset”。
如果以上方法都不行,可以在一个可以设置编码的编辑器中打开文档(比如jEdit)。试着用不同的编码,直到文本显示正常。然后把这个值作为encoding
参数,用在Python的codecs.open()
中。
你提到“原始”的Unicode字符串,这是什么意思呢?Unicode本身并不是一种编码方式,但有不同的编码方法来存储Unicode字符(可以看看Joel的这篇文章)。
在Python 3.0中,open函数有一个可选的encoding
参数,你可以用它来指定编码,比如UTF-8(这是一种非常常见的Unicode编码方式)。在Python 2.x中,可以查看codecs模块,它也提供了一个open函数,可以让你指定文件的编码。
补充:另外,为什么不让那些可怜的字符安静一下呢?可以在你的LaTeX文件顶部指定编码:
\usepackage[utf8]{inputenc}
(我没试过这个,但我觉得应该可以。你可能需要把utf8
换成utf8x
)