Python utf8重音问题

2024-09-30 16:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我的口音有点问题。在

我做了一个python脚本,从一些输入(IMAP fetch)中得到单词“refeiç”,这个单词是葡萄牙语的,我需要把它转换成人类可读的。解码后,它应该看起来像“refeiço”,但我没有得到这个结果。。。在

>>> print a 
refeição
>>> ENCODING = locale.getpreferredencoding()
>>> print ENCODING
UTF-8
>>> print a.encode(ENCODING)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128)
>>> a.decode('utf-8')
u'refei\xe7\xe3o'
>>> print a.decode('utf-8')
refeição

更新时间:

^{pr2}$

此外,这些单词被插入到mysql数据库中,“不可读”字符的显示方式与终端中相同。 表格排序规则为utf8_general_ci


Tags: in脚本人类fetch解码单词localeutf
2条回答

在工作中,我去除了所有的口音。在

以下是我使用的代码:

def remove_accents(s):
   return ''.join((c for c in unicodedata.normalize('NFD', s.decode('utf-8')) if unicodedata.category(c) != 'Mn'))

基于此答案: What is the best way to remove accents in a Python unicode string?

看起来您的终端窗口以单字节ISO-8859-1字符集(“拉丁语-1”)显示文本,但是python解释器认为终端正在讲UTF-8。我们可以从u'refei\xe7\xe3o'中看到Python具有正确的内部表示形式。显然,print命令随后将内部表示形式转换为UTF-8并将其发送到您的终端,当终端将UTF-8解释为ISO-8859-1时,就会产生胡言乱语。在

解决方法是通过更改区域设置或确保终端为utf-8,使您的语言环境与终端正在执行的操作相匹配。在

相关问题 更多 >