Python获取ASCII字符

时间:2014-07-19 13:25:27

标签: python ascii decode encode

我正在从互联网上检索数据,我希望它将其转换为ASCII。但我无法解决这个问题。 (Python 2.7)

当我在字符串上使用decode('utf-8')时,例如Yalçınkaya。我希望这可以转换为Yalcinkaya。原始数据是Yalçınkaya。

任何可以帮助我的人?​​

感谢。

修改:我已经尝试过将标记此问题的用户设为重复(What is the best way to remove accents in a Python unicode string?)的建议,但这并未解决我的问题。

该帖主要讨论删除特殊字符,这并没有解决我将土耳其字符(Yalçınkaya)替换为ascii字符(Yalcinkaya)的问题。

# Printing the raw string in Python results in "Yalçınkaya". 
# When applying unicode to utf8 the string changes to  'Yalçınkaya'. 
# HTMLParser is used to revert special characters such as commas
# FKD normalize is used, which converts the string to 'Yalçınkaya'. 
# Applying ASCII encoding results in 'Yalcnkaya', missing the original turkish 'i' which is not what I wanted. 
name = unicodedata.normalize('NFKD', unicode(name, 'utf8'))
name = HTMLParser.HTMLParser().unescape(name)
name = unicodedata.normalize('NFKD', u'%s' %name).encode('ascii', 'ignore')

1 个答案:

答案 0 :(得分:0)

让我们检查一下 - 首先,一个人真正需要了解什么是字符编码和Unicode。那是严重的。我建议您在继续进行项目之前先阅读http://www.joelonsoftware.com/articles/Unicode.html。 (顺便说一句,“转换为ASCII”并不是一个普遍有用的解决方案 - 它更像是经纪人。考虑尝试解析数字,但由于你不理解数字“9”,你决定跳过它)

那就是说 - 你可以告诉Python“解码”一个字符串,然后用一个合适的“未知”字符(u“\ ufffd”)替换所选编码的未知字符 - 然后你可以在之前替换那个字符将其重新编码为您的首选输出:raw_data.decode("ASCII", errors="replace")。如果您选择进一步制动解析,则可以使用“忽略”而不是替换:将仅抑制未知字符。请记住,解码后会得到一个“Unicode”对象 - 在将数据输出到任何地方(打印,录制到文件等)之前,必须对其应用“编码”方法 - 请阅读上面链接的文章。

现在 - 检查您的特定数据 - 特定Yalçınkaya是完全原始的UTF-8文本,看起来好像是在latin-1中编码的。只需像往常一样从utf-8解码它,然后使用上面的配方去除重音 - 但请注意,这只适用于带有变音符号的拉丁字母,而来自互联网的“世界文本”可能包含各种字符 - 你不应该依赖于可转换为ASCII的东西。我必须再说一遍:阅读那篇文章,重新思考你的实践。