【发布时间】:2019-05-24 07:27:07
【问题描述】:
我正在清理 .txt 文件的文本。但是,在阅读文件后,我发现文本中只有一些单词之间缺少空格和错误的字符。
我使用的是 Python 3,文本是越南语。
Orignial text: "vui lòng cởi đồ ra tôi muốn nghe khám bệnh"
In[1]: with open('test.txt') as f:
read_text = f.read()
read_text
Out[1] vui lòng cởi đô`ra tôi muốn nghe khám bệnh
仔细看“đồ ra” -> “đô`ra”。一个字符“ồ”变成了两个字符:“ô”和“`”。
当我使用re 删除所有特殊字符时
In[2]: import re
read_text = re.sub('\W+',' ',read_text)
read_text
Out[2]: vui lo ng cơ i đô ra tôi muô n nghe kha m bê nh
结果应该和原来的一样,但是没有。怎么了?
【问题讨论】:
-
我认为你需要包含编码。试试这个`with open('test.txt', encoding='utf-8')。检查此页面以获取 python 标准编码docs.python.org/2.4/lib/standard-encodings.html
-
这可能与用于在终端中呈现文本的字体有关 - 并非所有字体都能正确处理组合字符。尝试其他一些对 unicode 友好的字体,看看它们是否能正确呈现文本。
-
@Nick 我试过了,但还是不行。
-
@AnhQuýLêGia 有问题的字符是复合字符。如果您复制它 (ồ) 并按一次退格键,您会注意到 ô 仍然存在。两个字符并排显示是控制台未正确处理 ` 与 ô 的副作用。 re 示例没有按预期工作,因为上面带有 ` 的其他字符也是复合的,但您的控制台可以正确显示。
标签: python python-3.x unicode fonts terminal