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

标签 python utf-8

我使用的是 Python 2.5。这里发生了什么?我误解了什么?我该如何解决?

in.txt:

Stäckövérfløw

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()

输出:

Stäckövérfløw

S t � � c k � � v � � r f l � � w 

最佳答案

for i in line:
    print i,

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

import codecs
f = codecs.open('in', 'r', 'utf8')

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

sys.stdout = codecs.getwriter('utf8')(sys.stdout)

关于python - 读取字符时python中的UTF-8问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/985486/

相关文章:

python - 理解可变数量的参数?

java - Java + hudson 项目的编码

python - "TypeError: string argument without an encoding",但字符串已编码?

python - 开始使用 Python 教程,但有一些初学者问题

python - 在 azure ML 管道运行中序列化对象

Python 异常 "as"关键字

python - 如何使用 Pandas 读取不包含标题的 CSV 文件,仅捕获第一列中的数据并执行删除?

visual-studio - 如何配置Visual Studio以将UTF-8用作所有项目的默认编码?

没有 libiconv 的 C 字符串编码 UTF8

c++ - BOOST regex - 没有带有回调函数的 u32regex_replace() 原型(prototype)