使用不同的编码格式读取文件系统标准在Python3中

2024-05-01 21:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多文件(用utf8或gbk编码)。我的系统编码是utf-8(LANT=zh_中国UTF-8) ,所以我可以很容易地读取用utf8编码的文件。但我必须用gbk读取文件编码,如下所示(Python 3: How to specify stdin encoding):

import sys 
import io
input_stream = io.TextIOWrapper(sys.stdin.buffer, encoding='gbk')
for line in input_stream:
    print(line)

我的问题是如何使用标准输入. 或者你能给我一些更好的解决办法吗?谢谢~

---------------我的问题之前不清楚,我会补充更多的信息----------------

简而言之,我想处理这样的文件:

^{pr2}$

*.in表示许多用utf8或gbk编码的文件。在

如果我在处理程序.py. 在

for line in sys.stdin:
    ...some code

遇到gbk文件时,会抛出错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 0: invalid continuation byte

如果我使用这样的代码:

input_stream = io.TextIOWrapper(sys.stdin.buffer, encoding='gbk')
for line in input_stream:
    ...some code

遇到utf8文件时,会抛出错误:

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 25: illegal multibyte sequence

我想找到一种安全的方法来处理两种类型的文件(utf8和gbk)。谢谢你的帮助

-------------------------问题已解决--------------------------------

感谢@tripleee和其他人的帮助!我终于用下面的代码解决了我的问题。在

buffer_reader = sys.stdin.buffer
for line in buffer_reader:
    line = line.strip()
    try:
        content = line.decode('utf-8')
    except UnicodeDecodeError:
        content = line.decode('gbk')

Tags: 文件in编码forinputstreambufferstdin
1条回答
网友
1楼 · 发布于 2024-05-01 21:45:58

您可以将输入读取为原始字节,然后检查输入,以决定将其解码为什么。在

另请参见Reading binary data from stdin

假设你可以一次读取整行代码(也就是说,一整行的编码可以是一致的),我会尝试解码为utf-8,然后返回gbk。在

for raw_line in input_stream:
    try:
        line = raw_line.decode('utf-8')
    except UnicodeDecodeError:
        line = raw_line.decode('gbk')
    # ...

相关问题 更多 >