【发布时间】:2014-07-28 14:48:24
【问题描述】:
我正在尝试像这样在 Python 3 中规范化字符串中的重音字符:
from bs4 import BeautifulSoup
import os
def process_markup():
#the file is utf-8 encoded
fn = os.path.join(os.path.dirname(__file__), 'src.txt') #
markup = BeautifulSoup(open(fn), from_encoding="utf-8")
for player in markup.find_all("div", class_="glossary-player"):
text = player.span.string
print(format_filename(text)) # Python console shows mangled characters not in utf-8
player.span.string.replace_with(format_filename(text))
dest = open("dest.txt", "w", encoding="utf-8")
dest.write(str(markup))
def format_filename(s):
# prepare string
s = s.strip().lower().replace(" ", "-").strip("'")
# transliterate accented characters to non-accented versions
chars_in = "àèìòùáéíóú"
chars_out = "aeiouaeiou"
no_accented_chars = str.maketrans(chars_in, chars_out)
return s.translate(no_accented_chars)
process_markup()
输入的 src.txt 文件是 utf-8 编码的:
<div class="glossary-player">
<span class="gd"> Fàilte </span><span class="en"> Welcome </span>
</div>
<div class="glossary-player">
<span class="gd"> àèìòùáéíóú </span><span class="en"> aeiouaeiou </span>
</div>
输出文件 dest.txt 如下所示:
<div class="glossary-player">
<span class="gd">fã ilte</span><span class="en"> Welcome </span>
</div>
<div class="glossary-player">
<span class="gd">ã ã¨ã¬ã²ã¹ã¡ã©ãã³ãº</span><span class="en"> aeiouaeiou </span>
</div>
我试图让它看起来像这样:
<div class="glossary-player">
<span class="gd">failte</span><span class="en"> Welcome </span>
</div>
<div class="glossary-player">
<span class="gd">aeiouaeiou</span><span class="en"> aeiouaeiou </span>
</div>
我知道有像 unidecode 这样的解决方案,但只是想找出我在这里做错了什么。
【问题讨论】:
-
没有“ANSI 编码”。你的意思是你得到了 Windows 所谓的 ANSI,即Windows-1252 之类的东西?或者你真的恢复了 Unicode?span>
-
感谢您的更正 - 令人误解的是,Notepad++ 有一个“在 ANSI 中编码”菜单选项,我指的是。我没有找回 Unicode。
-
真的吗?那么
src.txt和你的 Python 程序的编码是什么?如果您处理的重音字符不是 UTF-8,我预计会出现错误。 -
dest.txt看起来像是有效的 UTF-8,您正在使用损坏或配置错误的东西查看它。 -
您如何查看生成的文件?
标签: python unicode beautifulsoup