读取字符时python中的UTF-8问题

jac*_*cob 8 python utf-8

我正在使用Python 2.5.这里发生了什么?我误解了什么?我该如何解决?

in.txt:

Stäckövérfløw
Run Code Online (Sandbox Code Playgroud)

code.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print """Content-Type: text/plain; charset="UTF-8"\n"""
f = open('in.txt','r')
for line in f:
    print line
    for i in line:
        print i,
f.close()
Run Code Online (Sandbox Code Playgroud)

输出:

Stäckövérfløw

S t ? ? c k ? ? v ? ? r f l ? ? w 
Run Code Online (Sandbox Code Playgroud)

Mil*_*les 14

for i in line:
    print i,
Run Code Online (Sandbox Code Playgroud)

当您读取文件时,您读入的字符串是一个字节字符串.for循环一次迭代一个字节.这会导致UTF-8编码字符串出现问题,其中非ASCII字符由多个字节表示.如果您想使用Unicode对象,其中字符是基本部分,您应该使用

import codecs
f = codecs.open('in', 'r', 'utf8')
Run Code Online (Sandbox Code Playgroud)

如果sys.stdout还没有适当的编码集,您可能需要将其包装起来:

sys.stdout = codecs.getwriter('utf8')(sys.stdout)
Run Code Online (Sandbox Code Playgroud)

  • `codecs.open`中的'r'参数实际上意味着'rb'(没有'\n'转换) (3认同)