在Python中遍历Unicode字符串

10
我遇到了一个问题,即用Python逐个字符地迭代unicode字符串。
print "w: ",word
for c in word:
    print "word: ",c

这是我的输出

w:  文本
word:  ? 
word:  ?
word:  ?
word:  ?
word:  ?
word:  ?

我的期望输出是:

文
本

当我使用len(word)时,我得到了6。显然每个字符都由3个Unicode块组成。
因此,我的Unicode字符串已成功存储在变量中,但我无法获取其中的字符。我尝试过使用encode('utf-8')、decode('utf-8)和codecs,但仍然无法获得任何好的结果。这似乎是一个简单的问题,但对我来说却异常困难。
希望有人能指导我正确的方向。
谢谢!
4个回答

17
# -*- coding: utf-8 -*-
word = "文本"
print(word)
for each in unicode(word,"utf-8"):
    print(each)

输出:

文本
文
本

@charpi 你一定把Unicode字符串和8位字符串混淆了吧? - Pruthvi Raj
3
您使用了错误的open方式,需要指定encoding='UTF-8'而不仅仅是'UTF-8',因为您正在设置mode参数。请参考链接:https://docs.python.org/2/library/codecs.html - jamylak
1
@charpi 使用 fileContent = codecs.open('fileName.txt','r','utf-8').read() 代替。 - Pruthvi Raj
@jamylak 谢谢!我已经修改了,但是错误仍然存在 :( - charpi
1
谢谢大家。经过一些尝试和错误,它终于起作用了,我会发布我所做的 :) - charpi
显示剩余5条评论

2
我使用的有效代码是这样的:
fileContent = codecs.open('fileName.txt','r',encoding='utf-8')
#...split by whitespace to get words..
for c in word:
        print(c.encode('utf-8'))

1
你也可以直接 print(c),无需再次编码,因为你注释的文件内容已经是Unicode了。 - Pruthvi Raj

2

您应该将单词字符串类型转换为Unicode

print "w: ",word
for c in word.decode('utf-8'):
    print "word: ",c

1

对于Python 3,以下是有效的代码:

import unicodedata

word = "文本"
word = unicodedata.normalize('NFC', word)
for char in word:
    print(char)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接