在Python中使用for循环丢失重音符号

时间:2013-11-30 12:37:30

标签: python eclipse string diacritics

当我在Python中使用下一个代码时:

line = "áaáaáaá"
for c in line:
    print c

我的出局是:

一个 一个 一个

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

我在谷歌搜索了一下这个问题,我在这里找到了一些东西:

http://eclipsesource.com/blogs/2013/02/21/pro-tip-unicode-characters-in-the-eclipse-console/

尝试从“启动配置”对话框>常见>并将编码设置为utf-8latin-1

如果这不能解决问题,请尝试将每个字符转换为utf-8格式,然后将其打印出来:

line = unicode("áaáaáaá", encoding="utf-8")
for c in line:
    print c

编辑:这里有一些解释:)

当您未将编码指定为utf-8时,解释程序会将其分解为错误的部分。例如,à存储为'\ xc3 \ xa1`。在循环中,python认为它是两个独立的字符:

>>> s = "áaáaáaá".encode()
>>> for i, c in enumerate(s):
    print(i,c)


0 195
1 161
2 97
3 195
4 161
5 97
6 195
7 161
8 97
9 195
10 161

它认为\xc3\xa1为两个字符,即:

Ã
¡

为什么在指定编码时它会起作用呢?好吧,我相信你已经得到了它。当您将编码设置为utf-8时,它会将格式设置为utf-8,并且它知道\xc3\xa1是一个字符。

好吧,在我的第二种方法中,即使你没有将编码设置为utf-8,它也会有效。为什么?因为:

line = unicode("áaáaáaá", encoding="utf-8")

将编码从utf-8转换为解释器使用的编码。

希望这有帮助!

答案 1 :(得分:1)

我在python解释器上尝试了以下内容来理解,希望这些发现可以帮到你!

\> line = "áaáaáaá"
\> line
'\xc3\xa1a\xc3\xa1a\xc3\xa1a\xc3\xa1'

这整行都是以utf-16存储的。注意á已转换为\xc3\xa1

line = "áaáaáaá"
for c in line:
    print c

分割线就像这样 - '\xc3' , '\xa1', 'a' , '\xc3' .... 这个输出就像� � a � � a � � a � �

所以如果你指定这样的东西 -

\> line = unicode("áaáaáaá", encoding="utf-8")
\> line
u'\xe1a\xe1a\xe1a\xe1'

这将以单字节本身编码所有字符的unicode值。

现在分割线就像这样 - '\xe1', a, '\xe1', 'a', '\xe1', 'a', ...

和输出类似于áaáaáaá