当我在Python中使用下一个代码时:
line = "áaáaáaá"
for c in line:
print c
我的出局是:
一个 一个 一个
我该如何解决这个问题?
答案 0 :(得分:3)
我在谷歌搜索了一下这个问题,我在这里找到了一些东西:
http://eclipsesource.com/blogs/2013/02/21/pro-tip-unicode-characters-in-the-eclipse-console/
尝试从“启动配置”对话框>常见>并将编码设置为utf-8
或latin-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á