【发布时间】:2012-12-18 18:25:37
【问题描述】:
我正在尝试编写一个简单的 Python 脚本,该脚本将文本文件作为输入,删除每个非文字字符,并将输出写入另一个文件。 通常我会做两种方式:
- 使用正则表达式结合
re.sub将每个非字母字符替换为空字符串 - 检查每一行中的每个字符并仅当它在
string.lowercase中时才将其写入输出
但这次的文字是意大利文的神曲(我是意大利人),所以有一些Unicode字符像
èéï
还有一些其他的。我在脚本的第一行写了# -*- coding: utf-8 -*-,但我得到的是,当脚本中写入 Unicode 字符时,Python 不会发出错误信号。
然后我尝试在我的正则表达式中包含 Unicode 字符,例如:
u'\u00AB'
而且它似乎可以工作,但是 Python 在从文件读取输入时,不会像读取它一样重写它读取的内容。例如,某些字符会被转换为平方根符号。
我该怎么办?
【问题讨论】:
-
看起来 Python 将文件视为 ISO 8859-15 (8859-1) 而不是 UTF-8。您必须弄清楚如何在文件句柄上设置 UTF-8 属性,以便 Python 知道它应该这样对待它。我不知道细节;不过,我确信这是可以做到的。 (请注意,“èéï”映射到 0xC3 0xA8 = U+00E8, 0xC3 0xA9 = U+00E9, 0xC3 0xAF = U+00EF,但如果将字节序列 0xE8, 0xE9, 0xEF 视为 UTF-8,则不是一个有效的序列。这些字节中的每一个都应该跟在 0x80..0xBF 范围内的 3 个字节是有效的 UTF-8。换句话说,不清楚您的文档是 Unicode。
-
什么是“非文字字符”?
-
@Mike Samuel 我的意思是任何数字符号标点符号。