【发布时间】:2014-07-15 09:43:23
【问题描述】:
我越来越相信,文件编码业务是故意使之尽可能混乱。我在读取仅包含一行的 utf-8 编码文件时遇到问题:
“blabla this is some text”
(请注意,引号是标准引号的一些花式版本)。
现在,我在上面运行这段 Python 代码:
import fileinput
def charinput(paths):
with open(paths) as fi:
for line in fi:
for char in line:
yield char
i = charinput('path/to/file.txt')
for item in i:
print(item)
有两个结果: 如果我从命令提示符运行我的 python 代码,结果是一些奇怪的字符,然后是错误消息:
ď
»
ż
â
Traceback (most recent call last):
File "krneki.py", line 11, in <module>
print(item)
File "C:\Python34\lib\encodings\cp852.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u20ac' in position
0: character maps to <undefined>
我认为问题出在 Python 尝试读取“错误”编码的文档这一事实,但有没有办法命令 fileinput.input 读取 utf-8?
编辑:发生了一些非常奇怪的事情,我不知道它是如何工作的。在notepad++ 中保存与之前相同的文件后,python 代码现在在 IDLE 中运行并产生以下输出(已删除换行符):
“blabla this is some text”
如果我先输入chcp 65001,我可以让命令提示符不崩溃。运行文件然后结果
Ä»żâ€śblabla this is some text ”
有什么想法吗?这是一个可怕的混乱,如果你问我,但我理解它是至关重要的......
【问题讨论】:
-
尝试更改代码页设置?
-
@PadraicCunningham 你这是什么意思?
-
您是从 Windows shell 运行它的吗?
-
@PadraicCunningham 在 Windows 7 命令提示符下,是的。
-
不是完全重复,但答案stackoverflow.com/a/11544596/3218018 会有所帮助